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