python正規表示式(二)

2021-08-13 08:18:25 字數 3172 閱讀 7202

python的正規表示式支援大量的擴充套件符號

通過使用(?ilmsux)系列,使用者可以在正規表示式裡面指定乙個或者多個標記,而不是通過compile()或者其他re模組函式。下面使用re.i/ignorecase的示例,最後乙個示例在re.m/multiline實現多行混合。

>>>import re

>>>re.findall(r'(?i)yes','yes? yes. yes!')

['yes','yes','yes']

>>>re.findall(r'(?i)th\w+','the quickest way is through this tunnel.')

['the', 'through', 'this']

>>> re.findall(r'(?im)(^th[\w ]+)','''

... this line is the fisrt ,

... another line,

... that line,it's the best

... ''')

['this line is the fisrt ', 'that line']

在前面兩個示例中,顯然不區分大小寫,在最後一行示例中,通過使用『多行』,能夠在目標字串中跨行搜尋,而不必將整個字串視為單個實體。

下一組演示使用re.s/dotall.該標記表明點號(.)能夠用來表示\n符號(反之其通常用於表示除了\n之外的全部字元):

>>> re.findall(r'th.+','''

... the firse line

... the second line

... the third line

... ''')

['the second line', 'the third line']

>>> re.findall(r'(?s)th.+','''

... the firse line

... the second line

... the third line

... ''')

['the second line\nthe third line\n']

re.x/verbose標記,允許使用者通過抑制在正規表示式中使用空白符號(除了在字元類中或者在反斜線轉義中)來建立更易讀的正規表示式。此外,雜湊、注釋、#號也可以用於乙個注釋的起始,只要他們不在乙個用反斜線轉義的字元類中。

>>> re.search(r'''(?x)

... \((\d)\) #區號

... [ ] #空白符

... (\d) #字首

... - #橫線

... (\d) #終點數字

... ''','(800) 555-1212').groups()

('800', '555', '1212')

>>>

(?:…)符號更流行;通過使用該符號,可以對部分正規表示式進行分組,但是並不會儲存該分組用於後續的檢索或者應用。當不想儲存今後不會使用的多餘匹配時,該符號非常有用。

>>>可以通過一起使用(?p<>) 和(?p=name)。前者通過使用乙個名稱識別符號而不是使用從1開始增加n的增量數字來儲存匹配,如果使用數字來儲存匹配結果,我們可以使用\1,\2….,\n來檢索。

>>> re.sub(r'\((?p\d)\) (?p\d)-(?:\d)',

...

'(\g) \g-***x','(800) 555-1212')

'(800) 555-***x'

>>>

處理驗證**號碼的規範化

>>> bool(re.match(r'\((?p\d)\) (?p\d)-(?p\d) (?p=areacode)-(?p=prefix)-(?p=number) 1(?p=areacode)(?p=prefix)(?p=number)',

...

'(800) 555-1212 800-555-1212 18005551212'))

true

>>>

使用(?=…)和(?!…)實現乙個前視匹配,而不必實際上使用這些字串,前者是正向前視斷言,後者是負向前視斷言。

>>> re.findall(r'\w+(?= van rossum)',

...

'''... guido van rossum

... tim peters

... alex martelli

... just van rossum

... ''')

['guido','just']

>>>

>>> re.findall(r'(?m)^\s+(?!noreply|postmaster)(\w+)',

...

'''... [email protected]

... [email protected]

... [email protected]

... [email protected]

... [email protected]

... ''')

['sales', 'eng', 'admin']

>>>

>>> bool(re.search(r'(?:(x|y)(?(1)y|x))','xy'))

true

>>> bool(re.search(r'(?:(x|y)(?(1)y|x))','xx'))

false

>>>

python正規表示式(二)

re模組的用法 1 re.s可以匹配轉義符 re.findall k.n darken dark nn 只輸出第乙個darken中的ken re.findall k.n darken dark nn re.s 不僅輸出darken中的ken,還輸出了dak nn中的k nn 2 re.m匹配多行 r...

Python 正規表示式(二)

這次的正規表示式學習談一談選擇符和子模式 可選項和重複子模式 在字串的各個字元都不相同的請胯下,字符集是比較好用的,但是如果只想匹配特定的字串,那麼字符集就不合適了,這裡就可以使用管道符號 比如我們只想匹配字串 python 和 perl 我們可以使用正則 python perl 但是有時候我們不需...

python正規表示式(二 )

re模組 匯入re模組 import re match方法 result re.match 正規表示式,要匹配的字串 result.group 字元 功能 匹配任意1個字元 除了 n 匹配 中列舉的字元 d匹配數字,即0 9 d匹配非數字,即不是數字 s匹配空白,即 空格,tab鍵 s匹配非空白 w...