淺談Python的正則表達(dá)式
Python 正則表達(dá)式
正則表達(dá)式本身是獨(dú)立于編程語言的知識,但是它又依附于編程語言,基本上我們所使用的編程語言都提供了對它的實(shí)現(xiàn),當(dāng)然了,各家的實(shí)現(xiàn)也是有一些差異的,有的支持的功能多一點(diǎn),有的支持的少一點(diǎn)。
因?yàn)檎齽t表達(dá)式是實(shí)踐中使用廣泛的工具,所以脫離語言的學(xué)習(xí)我認(rèn)為是不靠譜的。
正則表達(dá)式的函數(shù)介紹
正則表達(dá)式主要API關(guān)系圖
這個(gè)圖是我個(gè)人總結(jié)的,我覺得基本上把這里的函數(shù)的關(guān)系弄清楚了,它們的作用是:
- match 從文本的開頭匹配正則表達(dá)式,返回匹配的對象,沒有就返回 None
- search 在整個(gè)文本中匹配正則表達(dá)式,返回第一個(gè)匹配的對象,沒有就返回 None。
- sub 利用正則表達(dá)式進(jìn)行文本替換(正則表達(dá)式的功能:搜索和替換)
- findall 從整個(gè)文本中匹配正則表達(dá)式,以列表的形式返回所有匹配的結(jié)果。
- finditer 從整個(gè)文本中匹配正則表達(dá)式,以迭代器的形式返回所有匹配的結(jié)果。
- split 利用正則表達(dá)式切分文本
這里可以看出,·re· 下面有很多立即可以使用的函數(shù),然后 re.compile
下面有很多同名的函數(shù)。直接在 ·re· 模塊下的是官方提供方便使用的函數(shù),通過 re.compile
來使用是最正統(tǒng)的方式。所以,接下來的內(nèi)容,我基本上智慧使用 re.compile
及其下的方法來實(shí)現(xiàn)。
re.compile 函數(shù)
compile
函數(shù)用于編譯正則表達(dá)式,生成一個(gè)正則表達(dá)式 (Pattern)對象,供 match()
和 search()
以及其它函數(shù)使用。
語法:
re.compile(pattern[, flags])
- pattern: 一個(gè)字符串形式的正則表達(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!
這里給出一個(gè)接下來會一直使用的示例模板,這個(gè)模板是這篇博客最重要的東西了,之后的內(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á)式包含了很多非常易用的方法,但是這里我并不會過多介紹它們。我們會一直使用上面這種模式,因?yàn)槟切┮子玫姆椒ㄖ皇菍λ囊环N封裝,學(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 中的另一個(gè)常用模塊 —— statistics模塊,該模塊提供了用于計(jì)算數(shù)字?jǐn)?shù)據(jù)的數(shù)理統(tǒng)計(jì)量的函數(shù)。這篇文章重點(diǎn)給大家介紹python statistics 模塊的一些用法,感興趣的朋友跟隨小編一起看看吧2019-10-10工程師必須了解的LRU緩存淘汰算法以及python實(shí)現(xiàn)過程
這篇文章主要介紹了工程師必須了解的LRU緩存淘汰算法以及python實(shí)現(xiàn)過程,幫助大家更好的學(xué)習(xí)算法數(shù)據(jù)結(jié)構(gòu),感興趣的朋友可以了解下2020-10-10教你用python編寫腳本實(shí)現(xiàn)自動簽到
這篇文章主要介紹了教你怎樣用python編寫腳本實(shí)現(xiàn)自動簽到,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08python 遍歷列表提取下標(biāo)和值的實(shí)例
今天小編就為大家分享一篇python 遍歷列表提取下標(biāo)和值的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12