|
正則表達(dá)式可以包含一些可選標(biāo)志修飾符來(lái)控制匹配的模式。修飾符被指定為一個(gè)可選的標(biāo)志。多個(gè)標(biāo)志可以通過(guò)按位 OR(|) 它們來(lái)指定。如 re.I | re.M 被設(shè)置成 I 和 M 標(biāo)志:
| 修飾符 | 描述 |
| re.I |
使匹配對(duì)大小寫(xiě)不敏感 |
| re.L |
做本地化識(shí)別(locale-aware)匹配 |
| re.M |
多行匹配,影響 ^ 和 $ |
| re.S |
使 . 匹配包括換行在內(nèi)的所有字符 |
| re.U |
根據(jù)Unicode字符集解析字符。這個(gè)標(biāo)志影響 \w, \W, \b, \B. |
| re.X |
該標(biāo)志通過(guò)給予你更靈活的格式以便你將正則表達(dá)式寫(xiě)得更易于理解。 |
re.S
在Python的正則表達(dá)式中,有一個(gè)參數(shù)為re.S。它表示 “.” 的作用擴(kuò)展到整個(gè)字符串,包括“\n”??慈缦麓a:
1 2 3 4 5 6 7 8 | import re
a = '''asdfhellopass:
worldaf
'''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
print 'b is ' , b
print 'c is ' , c
|
1 2 3 | 運(yùn)行結(jié)果:
b is []
c is ['pass:\n\t123\n\t']
|
正則表達(dá)式中,“.”的作用是匹配除“\n”以外的任何字符,也就是說(shuō),它是在一行中進(jìn)行匹配。這里的“行”是以“\n”進(jìn)行區(qū)分的。a字符串有每行的末尾有一個(gè)“\n”,不過(guò)它不可見(jiàn)。
如果不使用re.S參數(shù),則只在每一行內(nèi)進(jìn)行匹配,如果一行沒(méi)有,就換下一行重新開(kāi)始,不會(huì)跨行。而使用re.S參數(shù)以后,正則表達(dá)式會(huì)將這個(gè)字符串作為一個(gè)整體,將“\n”當(dāng)做一個(gè)普通的字符加入到這個(gè)字符串中,在整體中進(jìn)行匹配。
re.I
不區(qū)分大小寫(xiě)
1 2 3 4 5 | res = re.findall(r"A", "abc", re.I)
print(res)
運(yùn)行結(jié)果:['a']
|
re.M
將所有行的尾字母輸出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | >>> s= '12 34/n56 78/n90'
>>> re.findall( r'^/d+' , s , re.M ) # 匹配位于行首的數(shù)字
['12', '56', '90']
>>> re.findall( r’/A/d+’, s , re.M ) # 匹配位于字符串開(kāi)頭的數(shù)字
['12']
>>> re.findall( r'/d+$' , s , re.M ) # 匹配位于行尾的數(shù)字
['34', '78', '90']
>>> re.findall( r’/d+/Z’ , s , re.M ) # 匹配位于字符串尾的數(shù)字
['90']
|
re.sub
1 2 3 4 | # 要求結(jié)果:['12', '23', '34']
l = ['1 2 ', '2 3', ' 3 4']
import re
print(eval(re.sub(r'\s*', '', str(l))))
|
|