python正則-re的用法詳解
天在刷題的時(shí)候用到了正則,用的過程中就感覺有點(diǎn)不太熟練了,很久沒有用正則都有點(diǎn)忘了。所以現(xiàn)在呢,我們就一起來review一下python中正則模塊re的用法吧。
今天是review,所以一些基礎(chǔ)的概念就不做介紹了,先來看正則中的修飾符以及它的功能:
修飾符
•re.I 使匹配對(duì)大小寫不敏感
•re.L 做本地化識(shí)別匹配
•re.M 多行匹配,影響^和$
•re.S 使.匹配包括換行在內(nèi)的所有字符
•re.U 根據(jù)Unicode字符集解析字符.這個(gè)標(biāo)志影響\w \W \b \B
•re.X 該標(biāo)志通過給予你更靈活的格式以便你將正則表達(dá)式寫的更易于理解.
模式
•^ 匹配字符串開頭
•$ 匹配字符串結(jié)尾
•. 匹配人以字符,除了換行符號(hào).當(dāng)re.DOTAALL標(biāo)記被指定時(shí),則可以匹配包括換行符的任意字符.
•[...] 用來表示一組字符,單獨(dú)列出:[amk]匹配a,m或k
•[^...] 不在[]中的字符:[^amk]匹配除amk之外的字符
•re* 匹配0個(gè)或多個(gè)的表達(dá)式
•re+ 匹配1個(gè)或多個(gè)的表達(dá)式
•re? 匹配0個(gè)或1個(gè)由前面的正則表達(dá)式定義的片段,非貪婪方式.
•re{n} 精準(zhǔn)匹配n個(gè)前面表達(dá)式
•re{n,} 匹配大于等于n個(gè)前面表達(dá)式
•re{n,m} 匹配n到m個(gè)前面的表達(dá)式定義的片段,貪婪方式
•a|b 匹配a或b
•(re) 對(duì)正則表達(dá)式分組,并記住匹配的文本
•(?imx) 正則表達(dá)式包含三種可選標(biāo)志,imx,只影響括號(hào)中的區(qū)域.
•(?-imx) 正則表達(dá)式關(guān)閉imx可選標(biāo)志,只影響括號(hào)中的區(qū)域.
•(?:re) 類似(...)但不表示一個(gè)組
•(?imx:re) 在括號(hào)中使用imx可選標(biāo)志
•(?-imx:re) 在括號(hào)中不是用imx可選標(biāo)志
•(?#...) 注釋
•(?=re) 前向肯定界定符.如果所含正則表達(dá)式,以...表示,在當(dāng)前位置成功匹配時(shí)成功,否則失敗.但一旦所含表達(dá)式已經(jīng)嘗試,匹配引擎根本沒有提高,模式的剩余部分還要嘗試界定符右邊.
•(?!re) 前向否定界定符.與肯定界定符相反;當(dāng)所含的表達(dá)式不能在字符串當(dāng)前位置匹配成功時(shí)成功.
•(?>re) 匹配的獨(dú)立模式,省去回朔.
•\w 匹配字符數(shù)字以及下劃線
•\W 匹配非字母數(shù)字下劃線
•\s 匹配任意空白字符,等價(jià)于[\t\n\r\f]
•\S 匹配任意非空白字符
•\d 匹配任意數(shù)字
•\D 匹配任意非數(shù)字
•\A 匹配字符串開始
•\Z 匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串.
•\z 匹配字符串結(jié)束
•\G 匹配最后匹配完成的位置
•\b 匹配一個(gè)單詞邊界,也就是指單詞和空格之間的位置
•\B 匹配非單詞邊界
•\n \t 匹配一個(gè)換行符,一個(gè)制表符
•\1...\9 匹配第n個(gè)分組的內(nèi)容
上面這些呢,是我們會(huì)用到的一些模式,這里面絕大部分都是應(yīng)該熟記于心的。
接下來我們看re的一些方法:
re.compile
這個(gè)方法會(huì)生成一個(gè)正則對(duì)象,他的第一個(gè)參數(shù)是正則字符串,第二個(gè)參數(shù)是修飾符,就是 re.I, re.S 這些。
生成的這個(gè)正則對(duì)象呢,它還有一些方法,比如match、findall、finditer、search等等,這些方法的用法請(qǐng)往下看。
re.match
match方法是從給定字符串的開頭開始進(jìn)行匹配,并且只匹配一次。也就是說如果字符串和正則的第一個(gè)字母就對(duì)不上那就匹配失敗了。
ta的參數(shù)是pettern,string,flags
•pettern 就是正則字符串,如果是通過re.compile方法生成的正則對(duì)象.match來調(diào)用的話,就不需要這個(gè)參數(shù)了,因?yàn)檎齽t對(duì)象本身就代表了一個(gè)正則匹配模式。
•string 就是要進(jìn)行匹配的目標(biāo)字符串
•flags 就是正則的修飾符,比如 re.I
match 如果匹配失敗返回None,匹配懲罰返回的則是一個(gè)match對(duì)象。
match對(duì)象有一些方法,比較常用的有:span、group、groups等等
•span 方法返回的一個(gè)二元組,分別表示匹配字符串在目標(biāo)字符串中的起始下標(biāo)和結(jié)束下標(biāo)
•group 函數(shù)有一個(gè)int類型的參數(shù),參數(shù)為0表示返回正則匹配的字符串,參數(shù)為1返回正則中第一個(gè)組匹配的內(nèi)容,2返回第二組的內(nèi)容一次類推
•groups 函數(shù)是所有g(shù)roup函數(shù)結(jié)果組成一個(gè)元組。
re.search
search 函數(shù)和 match 函數(shù)是類似的,區(qū)別在于match方法是只在目標(biāo)函數(shù)開頭匹配一次;search函數(shù)是在整個(gè)目標(biāo)函數(shù)上匹配一次,一次匹配成功后不再進(jìn)行匹配。
同樣search方法返回的也是一個(gè)match對(duì)象,用法和match方法返回的結(jié)果一樣。
re.split
split 函數(shù)是用來分割字符串的一個(gè)函數(shù)。它的功能就是根據(jù)匹配的字符串對(duì)目標(biāo)字符串進(jìn)行分割,返回的結(jié)果是一個(gè)列表。
需要注意的是,如果正則中有組,組內(nèi)的字符在結(jié)果列表中也會(huì)保留,不是組內(nèi)的字符在結(jié)果列表中不會(huì)被保留。什么意思呢?通過一個(gè)例子來看一下:
st = 'www.baidu.com www.taobao.com'
result = re.split('bai(du)', st)
print(result)
結(jié)果:
['www.', 'du', '.com www.taobao.com']
可以看到,字符串‘du'是被括號(hào)括起來的,所以在結(jié)果中也有'du'這個(gè)元素,而'bai'沒有被括號(hào)括起來,在結(jié)果中就不會(huì)有‘bai'這個(gè)元素。
re.findall
這個(gè)函數(shù)是我在爬蟲項(xiàng)目中用的最多的一個(gè)函數(shù)了,它可以把所有匹配的結(jié)果以列表的形式返回,而不是像match和search一樣只匹配一個(gè)結(jié)果。我們來試一下:
st = 'www.baidu.com www.taobao.com'
result = re.findall(r'www\.(\w*)\.(com)', st)
print(result)
[('baidu', 'com'), ('taobao', 'com')]
re.finditer
這個(gè)函數(shù)和findall的功能一樣。不同之處在于這個(gè)函數(shù)返回的結(jié)果是一個(gè)生成器,而生成器中的每一項(xiàng)是一個(gè)match對(duì)象,我們一起來看一下:
st = 'www.baidu.com www.taobao.com'
result = re.finditer(r'www\.(\w*)\.(com)', st)
print(result.__next__().group(0, 1, 2))
print(next(result).groups(2))
('www.baidu.com', 'baidu', 'com')
('taobao', 'com')
re.sub
這個(gè)函數(shù)是用來替換字符串的??梢詫⑵ヅ涞淖址鎿Q成指定的字符串,我們來看一下:
st = 'www.111.com www.222.com' result = re.sub(r'\d+', 'OK', st) print(result)
結(jié)果:
我們的第二個(gè)參數(shù)除了可以是一個(gè)給定的字符串還可以是一個(gè)函數(shù):
def toOK(matched): value = matched.group() return str(int(value)*2) st = 'www.111.com www.222.com' result = re.sub(r'\d+', toOK, st) print(result)
結(jié)果:
總結(jié)
以上所述是小編給大家介紹的python正則-re的用法詳解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
解鎖Python中神器vars內(nèi)置函數(shù)的使用
vars()函數(shù)是一個(gè)內(nèi)置函數(shù),用于返回對(duì)象的__字典__,其中包含對(duì)象的__屬性__,本文主要為大家詳細(xì)介紹了vars()函數(shù)的具體使用,需要的小伙伴可以了解下2023-11-11
Python中的type與isinstance的區(qū)別詳解
本文主要介紹了Python中的type與isinstance的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
使用python本地部署DeepSeek運(yùn)行時(shí)報(bào)錯(cuò)?OSError:?[WinError?193]?%1?不是
文章介紹了在本地使用Python部署DeepSeek時(shí)遇到的OSError:?[WinError?193]?錯(cuò)誤,通過檢查錯(cuò)誤信息,發(fā)現(xiàn)與numpy版本有關(guān),解決方法是卸載并重新安裝numpy,最終,問題得到解決,感興趣的朋友跟隨小編一起看看吧2025-02-02
Python matplotlib生成圖片背景透明的示例代碼
這篇文章主要介紹了Python matplotlib生成圖片背景透明的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

