正則表達式可以包含一些可選標志修飾符來控制匹配的模式。修飾符被指定為一個可選的標志。多個標志可以通過按位 OR(|) 它們來指定。如 re.I | re.M 被設(shè)置成 I 和 M 標志:
修飾符 | 描述 |
re.I |
使匹配對大小寫不敏感 |
re.L |
做本地化識別(locale-aware)匹配 |
re.M |
多行匹配,影響 ^ 和 $ |
re.S |
使 . 匹配包括換行在內(nèi)的所有字符 |
re.U |
根據(jù)Unicode字符集解析字符。這個標志影響 \w, \W, \b, \B. |
re.X |
該標志通過給予你更靈活的格式以便你將正則表達式寫得更易于理解。 |
re.S
在Python的正則表達式中,有一個參數(shù)為re.S。它表示 “.” 的作用擴展到整個字符串,包括“\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 | 運行結(jié)果:
b is []
c is [ 'pass:\n\t123\n\t' ]
|
正則表達式中,“.”的作用是匹配除“\n”以外的任何字符,也就是說,它是在一行中進行匹配。這里的“行”是以“\n”進行區(qū)分的。a字符串有每行的末尾有一個“\n”,不過它不可見。
如果不使用re.S參數(shù),則只在每一行內(nèi)進行匹配,如果一行沒有,就換下一行重新開始,不會跨行。而使用re.S參數(shù)以后,正則表達式會將這個字符串作為一個整體,將“\n”當做一個普通的字符加入到這個字符串中,在整體中進行匹配。
re.I
不區(qū)分大小寫
1 2 3 4 5 | res = re.findall(r "A" , "abc" , re.I)
print (res)
運行結(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))))
|
|