幾乎所有語(yǔ)言中的正則表達(dá)式都有相類(lèi)似的語(yǔ)法,python亦莫能外。
快速入門(mén)
#后續(xù)代碼均默認(rèn)導(dǎo)入re,且使用test
import re
test = '''
`[]`表示一個(gè)字符集合,在匹配時(shí)可以匹配集合中的任意值。例如`[abc]`可以匹配`asdzxc`中的`a`和`c`。
通過(guò)`-`可以表示某個(gè)范圍,例如`[a0-9]`表示匹配`a`和數(shù)字。
在`[]`中,特殊字符`+*()`將失去意義,會(huì)以普通的字符形式出現(xiàn)。而`^`將表示`非`,使用`^`之后將忽略對(duì)`[]`中的值的匹配。
'''
接下來(lái)直觀地看一下最常用的的三大函數(shù)
>>> print(re.match(r'[0-9]',test))
None
>>> re.search(r'[0-9]',test)
<re.Match object; span=(81, 82), match='0'>
>>> test[81:82]
'0' #說(shuō)明search匹配到了0
>>> re.findall(r'[0-9]',test)
['0', '9']
其中,re.match
要求從頭匹配;search
可以從任意位置匹配,但只返回第一個(gè)匹配的值的位置;findall
返回所有符合要求的值。
匹配格式
任意字符
-
.
匹配除了換行符之外的所有字符,在DOTALL
模式下包括換行符
開(kāi)頭結(jié)尾符號(hào)
-
^
匹配字符串的開(kāi)頭,在MULTILIME
模式下為行開(kāi)頭 -
$
匹配字符串結(jié)尾,在MULTILIME
模式下匹配行結(jié)尾
后置修飾符,針對(duì)修飾符前面的正則表達(dá)式進(jìn)行匹配
-
*
匹配0到任意次重復(fù),例如a*b
可以匹配b
,ab
,aab
等等 -
+
匹配1到任意次重復(fù),例如a*b
不可匹配b
,但可匹配ab
,aab
等等 -
?
匹配0或1次,例如a?b
只能匹配aaaab
中的ab
-
{m}
匹配m次,而且不可更改。例如a{2}
只能匹配aa
-
{m,n}
匹配m到n次重復(fù),且盡可能多,例如a{2,4}
可以匹配aa
,aaa
,aaaa
此外,?
可以修飾其他后置修飾符,表示非貪婪形式,例如a{2,4}
將盡可能少地匹配出現(xiàn)的字符。
或運(yùn)算符|
可以連接兩個(gè)正則表達(dá)式,例如A|B
可以匹配A
或者B
。
[]表達(dá)式
[]
表示一個(gè)字符集合,在匹配時(shí)可以匹配集合中的任意值。例如[abc]
可以匹配asdzxc
中的a
和c
。
通過(guò)-
可以表示某個(gè)范圍,例如[a0-9]
表示匹配a
和數(shù)字。
在[]
中,特殊字符+*()
將失去意義,會(huì)以普通的字符形式出現(xiàn)。而^
將表示非
,使用^
之后將忽略對(duì)[]
中的值的匹配。
轉(zhuǎn)義字符
除了Python中的標(biāo)準(zhǔn)轉(zhuǎn)義字符之外,正則表達(dá)式還提供了一些其他含義的轉(zhuǎn)義字符。
小寫(xiě) | 匹配內(nèi)容 | 大寫(xiě) | 匹配內(nèi)容 |
---|---|---|---|
\w |
數(shù)字字母下劃線 | \W |
非數(shù)字字母下劃線 |
\s |
空白字符 | \S |
非空白字符 |
\d |
數(shù)字 | \D |
非數(shù)字 |
\A |
字符開(kāi)始 | ||
\z |
字符結(jié)束 | \Z |
只匹配到換行前的結(jié)束字符 |
\b |
單詞便捷 | \B |
非單詞便捷 |
正則表達(dá)式標(biāo)簽:
re.match
等函數(shù)的輸入?yún)?shù)為
re.match(pattern, string, flags=0)
其中,pattern
即為將要匹配的模式;string
為待匹配字符串,flag
則是正則表達(dá)式的標(biāo)簽,起到一些其他的作用,可選參數(shù)如下
模式 | 簡(jiǎn)寫(xiě) | 說(shuō)明 |
---|---|---|
re.ASCII | re.A | 只匹配ASCII |
re.UNICODE | re.U | 根據(jù)Unicode解析字符(默認(rèn)) |
re.IGNORECASE | re.I | 對(duì)大小寫(xiě)不敏感 |
re.LOCALE | re.L | 由當(dāng)前語(yǔ)言決定\w, \W, \b, \B 以及大小寫(xiě)匹配 |
re.MULTILINE | re.M | 多行匹配 |
re.DOTALL | re.S | 匹配包括換行在內(nèi)的所有字符 |
re.VERBOSE | re.X | 認(rèn)為# 后面的是注釋 |
re.TEMPLATE | re.T | 禁用回溯 |
re.DEBUG | 顯示編譯時(shí)的debug信息 |
Pattern
通過(guò)re.compile
可以將待匹配字符串編譯為正則對(duì)象Pattern
,可更加方便地進(jìn)行調(diào)用。例如
>>> p = re.compile(r'[0-9]')
>>> p.findall(test)
['0', '9']
>>> p.pattern #pattern屬性即編譯前的字符串形式
'[0-9]'
Pattern
對(duì)象中的成員方法可以和re
模塊下的函數(shù)實(shí)現(xiàn)相同的功能。記pat
為正則字符串,p
為re.compile(pat)
編譯而成的正則對(duì)象,則就findall
這個(gè)函數(shù)而言,re.findall(pat,test)
就等價(jià)于p.findall(test)
。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-739131.html
除了findall
之外,下表中的函數(shù)均支持這種轉(zhuǎn)換文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-739131.html
- search:返回第一個(gè)匹配位置的對(duì)象;如無(wú)匹配返回None
- match:要求從頭匹配,其余和
search
相同 - fullmatch:若整個(gè)
test
與正則表達(dá)式匹配則返回匹配對(duì)象,否則返回None - findall:返回所有匹配內(nèi)容的列表
- finditer:返回所有匹配位置的列表
- spilt:通過(guò)正則表達(dá)式對(duì)字符串進(jìn)行分割
- sub:用于字符串的替代
- subn:與
sub()
相同,但是返回一個(gè)元組 - escape:對(duì)正則表達(dá)式中的特殊字符進(jìn)行轉(zhuǎn)義
到了這里,關(guān)于速通Python正則表達(dá)式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!