python正则表达式的懒惰匹配和贪婪匹配说明
第⼀次碰到这个问题的时候,确实不知道该怎么办,后来请教了⼀个⼤神,加上⾃⼰的理解,才了解是什么意思,这个东西写python的会经常⽤到,⽽且会特别频繁,在此写⼀篇博客,希望可以帮到⼀些朋友。
例:⼀个字符串 “abcdacsdnd”
①懒惰匹配
regex = "a.*?d"
②贪婪匹配
regex = "a.*d"
测试代码:
正则化匹配26个字母python# coding=UTF-8
import re
str = "abcdacsdn"
print("原始字符串 " + str)
# 懒惰匹配
regexL = "a.*?d"
print("懒惰匹配 = " + regexL)
regL = repile(regexL)
listL = re.findall(regL, str)
print("懒惰匹配结果")
print(listL)
# 贪婪匹配
regexT = "a.*d"
print("贪婪匹配 = " + regexT)
regT = repile(regexT)
listT = re.findall(regT, str)
print("贪婪匹配结果")
print(listT)
测试结果:
结果分析:
懒惰匹配,匹配成功两次,⼀次abcd,⼀次acsd,匹配到满⾜条件的abcd就停⽌了此次匹配,不会⼲扰
后⾯的继续匹配。
贪婪匹配,匹配成功⼀次,只有abcdacsd,匹配到字符串后,会最⼤限度的占⽤字符串
以上两种,⼀个是尽量匹配最短串,⼀个是匹配最长串。
补充知识:python正则匹配中贪婪匹配效率⽐较
⽤例回归完成之后,⼀般都要⽣成⼀个summary_report.但是,发现⽣成报告的时间耗时很久,搜集资料发现与匹配⽂件内容使⽤的正则表达式有很⼤关系.
1.匹配模式说明
下图中圈住的部分,没有注释掉的使⽤贪婪匹配,注释掉的使⽤⾮贪婪匹配
执⾏时间上⼆者差别巨⼤;另外执⾏时间与正则表达式的长度也有关系,较长的表达式建议分段匹配.
2.贪婪匹配时间
3.⾮贪婪匹配时间
以上这篇python正则表达式的懒惰匹配和贪婪匹配说明就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论