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'
相关文章推荐
- Python 正则表达式里面 贪婪模式和非贪婪模式的区别
- Python正则表达式的贪婪模式和非贪婪模式
- python正则表达式贪婪和非贪婪模式
- Python3正则表达式(三)贪婪模式与非贪婪模式
- python 正则表达式贪婪模式与非贪婪模式
- python中如何使用正则表达式的非贪婪模式示例
- python 正则表达式 贪婪模式的简介和匹配时的几种模式
- python正则表达式二——贪婪模式和预定义字符组
- python里使用正则表达式的非贪婪模式
- 06Python爬虫---正则表达式03之模式修正_贪婪模式与懒惰模式
- javascript中的正则表达式的贪婪模式和非贪婪模式讲解
- 正则表达式之 贪婪与非贪婪模式详解(概述)
- javascript中的正则表达式的贪婪模式和非贪婪模式等若干问题
- 正则表达式中的贪婪模式
- 正则表达式贪婪模式中的非贪婪模式
- 正则表达式贪婪与非贪婪模式
- preg_match_all 正则表达式贪婪与非贪婪模式
- python里使用正则表达式的重复模式
- python中正则表达式与模式匹配
- 学习笔记(16):Python数据分析与爬虫-Python爬虫:正则表达式中的常用模式字符串及两种匹配模式...