1、正則表達(dá)式的元字符及組裝形式
1. 匹配任意字符(不包括換行符)
2^ 匹配開(kāi)始位置,多行模式下匹配每一行的開(kāi)始
3$ 匹配結(jié)束位置,多行模式下匹配每一行的結(jié)束
4* 匹配前一個(gè)元字符0到多次
5+ 匹配前一個(gè)元字符1到多次
6? 匹配前一個(gè)元字符0到1次
7{m,n} 匹配前一個(gè)元字符m到n次
8\\ 轉(zhuǎn)義字符,跟在其后的字符將失去作為特殊元字符的含義,例如\\.只能匹配.,不能再匹配任意字符
9[] 字符集,一個(gè)字符的集合,可匹配其中任意一個(gè)字符
10| 邏輯表達(dá)式 或 ,比如 a|b 代表可匹配 a 或者 b
11(...) 分組,默認(rèn)為捕獲,即被分組的內(nèi)容可以被單獨(dú)取出,默認(rèn)每個(gè)分組有個(gè)索引,從 1 開(kāi)始,按照"("的順序決定索引值
12(?iLmsux) 分組中可以設(shè)置模式,iLmsux之中的每個(gè)字符代表一個(gè)模式,用法參見(jiàn) 模式 I
13(?:...) 分組的不捕獲模式,計(jì)算索引時(shí)會(huì)跳過(guò)這個(gè)分組
14(?P<name>...) 分組的命名模式,取此分組中的內(nèi)容時(shí)可以使用索引也可以使用name
15(?P=name) 分組的引用模式,可在同一個(gè)正則表達(dá)式用引用前面命名過(guò)的正則
16(?#...) 注釋,不影響正則表達(dá)式其它部分,用法參見(jiàn) 模式 I
17(?=...) 順序肯定環(huán)視,表示所在位置右側(cè)能夠匹配括號(hào)內(nèi)正則
18(?!...) 順序否定環(huán)視,表示所在位置右側(cè)不能匹配括號(hào)內(nèi)正則
19(?<=...) 逆序肯定環(huán)視,表示所在位置左側(cè)能夠匹配括號(hào)內(nèi)正則
20(?<!...) 逆序否定環(huán)視,表示所在位置左側(cè)不能匹配括號(hào)內(nèi)正則
21(?(id/name)yes|no) 若前面指定id或name的分區(qū)匹配成功則執(zhí)行yes處的正則,否則執(zhí)行no處的正則
22\number 匹配和前面索引為number的分組捕獲到的內(nèi)容一樣的字符串
23\A 匹配字符串開(kāi)始位置,忽略多行模式
24\Z 匹配字符串結(jié)束位置,忽略多行模式
25\b 匹配位于單詞開(kāi)始或結(jié)束位置的空字符串
26\B 匹配不位于單詞開(kāi)始或結(jié)束位置的空字符串
27\d 匹配一個(gè)數(shù)字, 相當(dāng)于 [0-9]
28\D 匹配非數(shù)字,相當(dāng)于 [^0-9]
29\s 匹配任意空白字符, 相當(dāng)于 [ \t\n\r\f\v]
30\S 匹配非空白字符,相當(dāng)于 [^ \t\n\r\f\v]
31\w 匹配數(shù)字、字母、下劃線中任意一個(gè)字符, 相當(dāng)于 [a-zA-Z0-9_]
32\W 匹配非數(shù)字、字母、下劃線中的任意字符,相當(dāng)于 [^a-zA-Z0-9_]
來(lái)源說(shuō)明:以上元字符表說(shuō)明引用自“博客園,菜鳥(niǎo)的日?!?/p>
2、python 的內(nèi)置模塊 re 操作正則表達(dá)式的模式
1re.I 使匹配對(duì)大小寫不敏感
2re.L 做本地化識(shí)別(locale-aware)匹配
3re.M 多行匹配,影響 ^ 和 $
4re.S 使 . 匹配包括換行在內(nèi)的所有字符
5re.U 根據(jù)Unicode字符集解析字符。這個(gè)標(biāo)志影響 \w, \W, \b, \B.
6re.X 該標(biāo)志通過(guò)給予你更靈活的格式以便你將正則表達(dá)式寫得更易于理解。
compile(pattern, flags=0) 對(duì)匹配的正則表達(dá)式進(jìn)行預(yù)編譯,這種模式有利于后續(xù)對(duì)同一種匹配規(guī)則的復(fù)用,當(dāng)然也可以不進(jìn)行預(yù)編譯使用 re 模塊的內(nèi)置函數(shù)直接進(jìn)行正則表達(dá)式的使用。
1# 導(dǎo)入 re 內(nèi)置模塊
2import re
3# 定義多行字符串 sc
4sc = '''str1
5str2
6str3'''
7
8# 使用 compile() 函數(shù)進(jìn)行正則表達(dá)式對(duì)預(yù)編譯
9# 其中正則表達(dá)式為<.+>參照元字符表,表達(dá)式中<.>表示匹配任意字符(不包括換行符)
10# <+> 表示匹配前一個(gè)元字符1到多次,組合<.+>就表示匹配所有字符不包括換行符
11pattern = re.compile(".+")
12# 正則表達(dá)對(duì)象調(diào)用 findall() 函數(shù)返回列表
13print pattern.findall(sc)
14# 打印返回列表,結(jié)果應(yīng)該是下面列表
15['str1', 'str2', 'str3']
1# 定義原始字符串
2sc = '''strw 1 laow
3 strd 2 laow
4 strc 3 laow'''
5# 按照數(shù)字切分
6print re.split('\d+', sc)
7# 打印結(jié)果
8['strw ', ' laow\n strd ', ' laow\n strc ', ' laow']
sub(pattern, repl, string, count=0, flags=0) 匹配正則表達(dá)式的字符串并且替換成指定的字符串后返回。
1# 導(dǎo)入內(nèi)置模塊 re
2import re
3# 定義原始字符串
4sc = "the sum of 6 and 9 is [6+9]."
5# 將[6+9]替換為15
6print re.sub('\[6\+9\]', '15', sc)
7# 打印結(jié)果
8the sum of 7 and 9 is 15.
1# 導(dǎo)入內(nèi)置模塊 re
2import re
3# 定義原始數(shù)據(jù)
4sc = '''strw 1 laow
5 strd 2 laow
6 strc 3 laow'''
7# 找到第一個(gè)以 t 開(kāi)頭的字符串
8sc_res = re.search('t\w+', sc)
9# 必須使用返回對(duì)象的 group() 函數(shù)才能打印出值,因?yàn)?nbsp;search() 函數(shù)返回的是對(duì)象
10print sc_res.group()
escape(pattern) 字符串的轉(zhuǎn)義函數(shù),當(dāng)需要處理的字符串中包含正則表達(dá)式中的元字符時(shí)必須對(duì)原正則表達(dá)式進(jìn)行轉(zhuǎn)義,否則會(huì)導(dǎo)致匹配不正確。
1# 導(dǎo)入內(nèi)置模塊 re
2import re
3# 定義原始字符串
4sc = ".+\d222"
5# 將正則表達(dá)式<.+\d222>進(jìn)行轉(zhuǎn)義
6pattern_str = re.escape(".+\d222")
7# 打印轉(zhuǎn)移后的正則表達(dá)式
8print pattern_str
9# 打印結(jié)果
10\.\+\\d222
11# 打印匹配后的字符串
12print re.findall(pattern_str, sc)
13# 打印結(jié)果
14['.+\\d222']
除了上述第三點(diǎn)中列舉的常見(jiàn)內(nèi)置函數(shù)的使用,還有關(guān)于 python 內(nèi)置的正則表達(dá)式的用法還有分組、環(huán)視等使用方法。能夠幫助我們處理字符串的大多數(shù)問(wèn)題,正則表達(dá)式在 python 中的使用非常強(qiáng)大、也是后端語(yǔ)言中使用比較高的,建議大家收藏。
聯(lián)系客服