淺談Python的正則表達(dá)式
Python 正則表達(dá)式
正則表達(dá)式本身是獨立于編程語言的知識,但是它又依附于編程語言,基本上我們所使用的編程語言都提供了對它的實現(xiàn),當(dāng)然了,各家的實現(xiàn)也是有一些差異的,有的支持的功能多一點,有的支持的少一點。
因為正則表達(dá)式是實踐中使用廣泛的工具,所以脫離語言的學(xué)習(xí)我認(rèn)為是不靠譜的。
正則表達(dá)式的函數(shù)介紹
正則表達(dá)式主要API關(guān)系圖
這個圖是我個人總結(jié)的,我覺得基本上把這里的函數(shù)的關(guān)系弄清楚了,它們的作用是:
- match 從文本的開頭匹配正則表達(dá)式,返回匹配的對象,沒有就返回 None
- search 在整個文本中匹配正則表達(dá)式,返回第一個匹配的對象,沒有就返回 None。
- sub 利用正則表達(dá)式進(jìn)行文本替換(正則表達(dá)式的功能:搜索和替換)
- findall 從整個文本中匹配正則表達(dá)式,以列表的形式返回所有匹配的結(jié)果。
- finditer 從整個文本中匹配正則表達(dá)式,以迭代器的形式返回所有匹配的結(jié)果。
- split 利用正則表達(dá)式切分文本
這里可以看出,·re· 下面有很多立即可以使用的函數(shù),然后 re.compile
下面有很多同名的函數(shù)。直接在 ·re· 模塊下的是官方提供方便使用的函數(shù),通過 re.compile
來使用是最正統(tǒng)的方式。所以,接下來的內(nèi)容,我基本上智慧使用 re.compile
及其下的方法來實現(xiàn)。
re.compile 函數(shù)
compile
函數(shù)用于編譯正則表達(dá)式,生成一個正則表達(dá)式 (Pattern)對象,供 match()
和 search()
以及其它函數(shù)使用。
語法:
re.compile(pattern[, flags])
- pattern: 一個字符串形式的正則表達(dá)式
- flags 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數(shù)為:
- re.I 忽略大小寫
- re.L 多行模式
- re.S 即為 '.' 并且包括換行符在內(nèi)的任意字符('.' 不包括換行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴 Unicode 字符屬性數(shù)據(jù)庫
- re.X 為了增加可讀性,忽略空格和 ‘#’ 后面的注釋
示例:查找字符串中的所有數(shù)字
import re s = 'runoob 123 google 456' result1 = re.findall(r'\d+', s) pattern = re.compile(r'\d+') # 查找數(shù)字 result2 = pattern.findall(s) result3 = pattern.findall(s, 0, 20) print(result1) print(result2) print(result3) """ output: [‘123', ‘456'] [‘123', ‘456'] [‘123', ‘45'] """
學(xué)習(xí)模板
接下來我們要逐漸學(xué)習(xí)正則表達(dá)的內(nèi)容,這些內(nèi)容是非常有趣的!Interesting and Excited!
這里給出一個接下來會一直使用的示例模板,這個模板是這篇博客最重要的東西了,之后的內(nèi)容都會基于它進(jìn)行擴(kuò)展。所以,請好好理解它。
import re # 需要進(jìn)行搜索或者匹配的文本 text = """I love you yesterday and today.""" # 正則表達(dá)式 regexp = r'love' # 編譯(對正則表達(dá)式進(jìn)行編譯獲取 Pattern Object) pattern = re.compile(regexp) # 搜索 m = pattern.search(text) if m: print("匹配對象: ", m) print("匹配的字符串: ", m.group()) print("匹配的開始位置: ", m.start()) print("匹配的結(jié)束位置: ", m.end()) print("匹配位置的元組: ", m.span()) else: print("No match!") # 替換 new_text = pattern.sub("hate", text) print(new_text)
注意: 正則表達(dá)式 regexp 在開始前會使用 r
前綴,這樣做的目的是為了避免在正則表達(dá)式中大量使用轉(zhuǎn)義字符,破壞了整體的可讀性。
Python 的正則表達(dá)式包含了很多非常易用的方法,但是這里我并不會過多介紹它們。我們會一直使用上面這種模式,因為那些易用的方法只是對它的一種封裝,學(xué)習(xí)使用這種基本的方式自然就會其它的了。
匹配對象 可以獲取有關(guān)正則表達(dá)式的信息,它最重要的方法和屬性是:
方法/屬性 | 目的 |
group() | 返回正則匹配的字符串 |
start() | 返回匹配的開始位置 |
end() | 返回匹配的結(jié)束位置 |
span() | 返回包含匹配 (start, end) 位置的元組 |
到此這篇關(guān)于淺談Python的正則表達(dá)式的文章就介紹到這了,更多相關(guān)Python正則表達(dá)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中print和return的作用及區(qū)別解析
print的作用是輸出數(shù)據(jù)到控制端,就是打印在你能看到的界面上。這篇文章給大家介紹Python中print和return的作用及區(qū)別解析,感興趣的朋友跟隨小編一起看看吧2019-05-05詳解python statistics模塊及函數(shù)用法
本節(jié)介紹 Python 中的另一個常用模塊 —— statistics模塊,該模塊提供了用于計算數(shù)字?jǐn)?shù)據(jù)的數(shù)理統(tǒng)計量的函數(shù)。這篇文章重點給大家介紹python statistics 模塊的一些用法,感興趣的朋友跟隨小編一起看看吧2019-10-10工程師必須了解的LRU緩存淘汰算法以及python實現(xiàn)過程
這篇文章主要介紹了工程師必須了解的LRU緩存淘汰算法以及python實現(xiàn)過程,幫助大家更好的學(xué)習(xí)算法數(shù)據(jù)結(jié)構(gòu),感興趣的朋友可以了解下2020-10-10