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