正則表達(dá)式可以包含一些可選標(biāo)志修飾符來控制匹配的模式。修飾符被指定為一個(gè)可選的標(biāo)志。多個(gè)標(biāo)志可以通過按位 OR(|) 它們來指定。如 re.I | re.M 被設(shè)置成 I 和 M 標(biāo)志:
修飾符 | 描述 |
re.I |
使匹配對(duì)大小寫不敏感 |
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)志通過給予你更靈活的格式以便你將正則表達(dá)式寫得更易于理解。 |
re.S
在Python的正則表達(dá)式中,有一個(gè)參數(shù)為re.S。它表示 “.” 的作用擴(kuò)展到整個(gè)字符串,包括“\n”。看如下代碼:
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”以外的任何字符,也就是說,它是在一行中進(jìn)行匹配。這里的“行”是以“\n”進(jìn)行區(qū)分的。a字符串有每行的末尾有一個(gè)“\n”,不過它不可見。
如果不使用re.S參數(shù),則只在每一行內(nèi)進(jìn)行匹配,如果一行沒有,就換下一行重新開始,不會(huì)跨行。而使用re.S參數(shù)以后,正則表達(dá)式會(huì)將這個(gè)字符串作為一個(gè)整體,將“\n”當(dāng)做一個(gè)普通的字符加入到這個(gè)字符串中,在整體中進(jìn)行匹配。
re.I
不區(qū)分大小寫
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 ) # 匹配位于字符串開頭的數(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))))
|
|