Python常用模块之re模块
就其本質(zhì)而言,正則表達(dá)式(或 RE)是一種小型的、高度專業(yè)化的編程語言,(在Python中)它內(nèi)嵌在Python中,并通過 re 模塊實(shí)現(xiàn)。
正則表達(dá)式模式被編譯成一系列的字節(jié)碼,然后由用 C 編寫的匹配引擎執(zhí)行。
字符匹配(普通字符,元字符):
普通字符:
大多數(shù)字符和字母都會和自身匹配
元字符:( . ^ $ * + ? { } [ ] | ( ) \ )
- 轉(zhuǎn)義符 \ :
1、反斜杠后邊跟元字符去除特殊功能,
2、反斜杠后邊跟普通字符實(shí)現(xiàn)特殊功能,
\d 匹配任何十進(jìn)制數(shù); 它相當(dāng)于類 [0-9]。 \D 匹配任何非數(shù)字字符; 它相當(dāng)于類 [^0-9]。 \s 匹配任何空白字符; 它相當(dāng)于類 [ \t\n\r\f\v]。 \S 匹配任何非空白字符; 它相當(dāng)于類 [^ \t\n\r\f\v]。 \w 匹配任何字母數(shù)字字符; 它相當(dāng)于類 [a-zA-Z0-9_]。 \W 匹配任何非字母數(shù)字字符; 它相當(dāng)于類 [^a-zA-Z0-9_] \b 匹配一個特殊字符邊界,比如空格 ,&,#等-
分組 ()
-
元字符之|
-
字符集[]
**貪婪匹配:**在滿足匹配時,匹配盡可能長的字符串,默認(rèn)情況下,采用貪婪匹配
**非貪婪匹配:**在滿足匹配時,匹配盡可能短的字符串,使用?來表示非貪婪匹配
幾個常用的非貪婪匹配Pattern:
- *? 重復(fù)任意次,但盡可能少重復(fù)
- +?重復(fù)1次或更多次,但盡可能少重復(fù)
- ?? 重復(fù)0次或1次,但盡可能少重復(fù)
- {n,m}? 重復(fù)n到m次,但盡可能少重復(fù)
- {n,}? 重復(fù)n次以上,但盡可能少重復(fù)
.*?的用法:
- . 是任意字符
- * 是取 0 至 無限長度
- ?是非貪婪模式。
和在一起就是 取盡量少的任意字符,一般不會這么單獨(dú)寫,他大多用在:
- .*?x -----就是取前面任意長度的字符,直到一個x出現(xiàn)
實(shí)例:re模塊下的常用方法
''' 學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:725638078 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' import rere.findall('a','alvin yuan') #返回所有滿足匹配條件的結(jié)果,放在列表里re.search('a','alvin yuan').group() #函數(shù)會在字符串內(nèi)查找模式匹配,只到找到第一個匹配然后返回一個包含匹配信息的對象,該對象可以 # 通過調(diào)用group()方法得到匹配的字符串,如果字符串沒有匹配,則返回None。re.match('a','abc').group() #同search,不過盡在字符串開始處進(jìn)行匹配ret=re.split('[ab]','abcd') #先按'a'分割得到''和'bcd',在對''和'bcd'分別按'b'分割print(ret)#['', '', 'cd']ret=re.sub('\d','abc','alvin5yuan6',1)ret=re.subn('\d','abc','alvin5yuan6')obj=re.compile('\d{3}') ret=obj.search('abc123eeee') print(ret.group())#123import re ret=re.finditer('\d','ds3sy4784a') print(ret) #<callable_iterator object at 0x10195f940>print(next(ret).group()) print(next(ret).group())findall的優(yōu)先級查詢:
import reret=re.findall('www.(baidu|oldboy).com','www.oldboy.com') print(ret)#['oldboy'] 這是因?yàn)閒indall會優(yōu)先把匹配結(jié)果組里內(nèi)容返回,如果想要匹配結(jié)果,取消權(quán)限即可ret=re.findall('www.(?:baidu|oldboy).com','www.oldboy.com') print(ret)#['www.oldboy.com']split的優(yōu)先級查詢:
ret=re.split("\d+","yuan2egon56alex") print(ret)ret=re.split("(\d+)","yuan2egon56alex") print(ret)結(jié)尾給大家推薦一個非常好的學(xué)習(xí)教程,希望對你學(xué)習(xí)Python有幫助!
Python基礎(chǔ)入門教程推薦:更多Python視頻教程-關(guān)注B站:Python學(xué)習(xí)者
Python爬蟲案例教程推薦:更多Python視頻教程-關(guān)注B站:Python學(xué)習(xí)者
總結(jié)
以上是生活随笔為你收集整理的Python常用模块之re模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python常用模块之sys模块
- 下一篇: Python常用模块之logging模块