python正則表示式匹配分組的使用
阿新 • • 發佈:2018-12-19
正則表示式匹配分組等其他的情況
字元 | 功能 |
---|---|
| | 匹配左右任意一個表示式 |
(ab) | 將括號中字元作為一個分組,可以和|一起使用(ab|cd)表示匹配括號內分組中的一個 |
\num |
引用分組num匹配到的字串 |
(?P<name>) |
分組起別名 |
(?P=name) | 引用別名為name分組匹配到的字串 |
案例演示1:
import re pattern = '^M?M?M?(CM|CD|D?C?C?C?)$' str = 'MMDCC' s= re.search(pattern,str) print(s.group()) #MMDCC,將()做一個分組,然後|表示匹配其左右任意一個表示式 str1 ='MCMCD' s1 = re.search(pattern,str1) print(s1.group()) #匹配失敗,因為CM和DC在|的左右,只可以匹配其中之一
案例演示2:
import re pattern ='^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$' s1 = re.search(pattern, 'MDLV') print(s1.group()) #MDLV.第一個M匹配,第一個括號匹配D.第二個括號L.第三個括號V. s2 = re.search(pattern,'') print(s2.group()) #匹配成功空串.第一個M可以為空,第一個括號DC可以為空,後面同理 s3 = re.search(pattern, 'MMDCLXVI') print(s3.group()) #MMDCLXVI s4 = re.search(pattern, 'MMMDCCCLXXXVIII') print(s4.group()) #MMMDCCCLXXXVIII s5 = re.search(pattern,'I') print(s5.group()) #I 前面為空,最後一個括號匹配I
案例3:group的使用補充
import re ''' group()將匹配的結果直接以字串的形式返回 groups()將正則匹配中的分組()匹配結果以元組形式返回 group(1) 將groups分組匹配的結果分別取出 ''' phonePattern = re.compile(r'^\D*(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$') s1 = phonePattern.search('(800)5551212 ext.1234') #注意下面group(),groups(),group(1)的結果 print(s1.group()) #(800)5551212 ext.1234 print(s1.groups()) #('800', '555', '1212', '1234') print(s1.group(1)) #800
總結:
^ 匹配字串開始位置。
• $ 匹配字串結束位置。
• \b 匹配一個單詞邊界。
• \d 匹配一個數字。
• \D 匹配一個任意的非數字字元。
• x? 匹配可選的 x 字元。換句話說,就是 0 個或者 1 個 x 字元。
• x* 匹配 0 個或更多的 x。
• x+ 匹配 1 個或者更多 x。
• x{n,m} 匹配 n 到 m 個 x,至少 n 個,不能超過 m 個。
• (a|b|c) 匹配單獨的任意一個 a 或者 b 或者 c。
• (x) 這是一個組,它會記憶它匹配到的字串。你可以用
re.search 返回的匹配物件的 groups()函式來獲取到匹配的值