您的位置:首页 > 编程语言 > Python开发

python正则表达式之【|】,【?】非贪婪模式

2019-07-24 17:37 435 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/lealiujj/article/details/97144156

正则表达式其他都还好理解,就“|”、“?”使用过程中掉过坑里,特此几个列子记录下,仍然用ipython来测试,以备查阅。
先说明下:
正则表达式 “|” # 匹配|之前的正则或之后的正则
多个字符匹配 “?” # 匹配?之前的正则要么没有要么有且只有1个

一、"|" 或

In [261]: re.match("[a-z]?\d$|300", "0").group()
Out[261]: '0'

In [262]: re.match("[a-z]?\d$|300", "300").group()
Out[262]: '300'

re.match("[a-z]?\d$|300", "a300").group()  # 匹配失败,既不符合|之前的正则“[a-z]?\d$"($表示正则要匹配到给出字符串的末尾),也不符合|之后的正则"300",所以匹配失败
AttributeError: 'NoneType' object has no attribute 'group'

In [265]: re.match("[a-z]?\d|300", "a300").group()  # 去掉正则中的$则有匹配输出
Out[265]: 'a3'
In [287]: re.match("[a-z]\d{1,9}(a|b)|300","a300b300").group()
Out[287]: 'a300b'

通过括号()来作为表达式改变或“|”正则运算的条件

In [288]: re.match("[a-z]\d{1,9}(a|b)|300","300").group()
Out[288]: '300'
In [293]: re.match("[a-z]\d{1,9}(a|b)|300","a300").group()  #匹配失败
AttributeError: 'NoneType' object has no attribute 'group'
In [294]: re.match("[a-z]\d{1,9}(a|b)|300","a300b").group()
Out[294]: 'a300b'
In [289]: re.match("[a-z]\d{1,9}a|b|300","300").group()
Out[289]: '300'
In [290]: re.match("[a-z]\d{1,9}a|b|300","a300a").group()
Out[290]: 'a300a'
In [291]: re.match("[a-z]\d{1,9}a|b|300","a300").group()  #匹配失败
AttributeError: 'NoneType' object has no attribute 'group'
In [292]: re.match("[a-z]\d{1,9}a|b|300","b").group()
Out[292]: 'b'

()作为分组

In [302]: re.match("[a-z]\d{1,9}(a)|(b)|300","b").group()
Out[302]: 'b'
In [303]: re.match("[a-z]\d{1,9}(a)|(b)|300","b").group(1)  # group(1)没有匹配到数据因此为空
In [304]: re.match("[a-z]\d{1,9}(a)|(b)|300","b").group(2)
Out[304]: 'b'

二、通过?实现非贪婪,可以在+,*,?,{n,m},四个匹配多个字符的正则后面加上?实现非贪婪

+

In [270]: re.match("[a-z]\d+|300", "a400").group()  # 贪婪
Out[270]: 'a400'
In [269]: re.match("[a-z]\d+?|300", "a400").group()  # 非贪婪
Out[269]: 'a4'

*

In [273]: re.match("[a-z]\d*|300", "a400").group()  # 贪婪
Out[273]: 'a400'
In [274]: re.match("[a-z]\d*?|300", "a400").group()  # 非贪婪
Out[274]: 'a'

In [276]: re.match("[a-z]\d?|300", "a400").group()  # 贪婪
Out[276]: 'a4'
In [275]: re.match("[a-z]\d??|300", "a400").group()  # 非贪婪
Out[275]: 'a'

{n,m}

In [281]: re.match("[a-z]\d{1,3}|300", "a400").group()  # 贪婪
Out[281]: 'a400'
In [280]: re.match("[a-z]\d{1,3}?|300", "a400").group()  # 非贪婪
Out[280]: 'a4'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: