Python正則表達(dá)式中的re.S,re.M,re.I的作用

正則表達(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á)式寫得更易于理解。


re.S

在Python的正則表達(dá)式中,有一個參數(shù)為re.S。它表示 “.” 的作用擴(kuò)展到整個字符串,包括“\n”。看如下代碼:

importre

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

運(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)行匹配。


re.I

  不區(qū)分大小寫

res =re.findall(r"A", "abc", re.I)

print(res)


運(yùn)行結(jié)果:['a']


re.M

  將所有行的尾字母輸出

>>> 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

# 要求結(jié)果:['12', '23', '34']

l =['1 2 ', '2?? 3', '? 3 4']

importre

print(eval(re.sub(r'\s*', '', str(l))))





轉(zhuǎn) https://www.cnblogs.com/feifeifeisir/p/10627474.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容