1. 程式人生 > >python正則表示式匹配分組的使用

python正則表示式匹配分組的使用

正則表示式匹配分組等其他的情況

字元 功能
| 匹配左右任意一個表示式
(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()函式來獲取到匹配的值