python正则表示式匹配分组的使用

版权声明:本文为博主原创文章,未经博主女朋友允许不得转载。 https://blog.csdn.net/qq_26442553/article/details/83824806

正则表达式匹配分组等其他的情况

字符 功能
| 匹配左右任意一个表达式
(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()函数来获取到匹配的值

 

猜你喜欢

转载自blog.csdn.net/qq_26442553/article/details/83824806
今日推荐