Python正则表达式中,如何区分正则表达式的懒惰匹配与贪婪匹配?
- 内容介绍
- 文章标签
- 相关推荐
本文共计902个文字,预计阅读时间需要4分钟。
第一次遇到这个问题时,确实感到困惑,不知道该如何解决。后来请教了一位大牛,结合自己的理解,才逐渐明白其意。这个问题的核心在于Python中的一些常用操作,虽然基础,但使用频率较高。在此,我将总结一些Python的常用操作,并特别指出一些高频使用场景,希望能帮助大家更好地理解和应用。
以下是一些Python的常用操作和场景:
1. 变量和赋值pythonx=10 # 整数y=3.14 # 浮点数name=Alice # 字符串
2. 列表操作pythonmy_list=[1, 2, 3, 4, 5]print(my_list[0]) # 输出列表第一个元素my_list.append(6) # 在列表末尾添加元素
3. 字典操作pythonmy_dict={name: Alice, age: 25}print(my_dict[name]) # 输出字典中name对应的值my_dict[city]=New York # 添加新的键值对
4. 循环pythonfor i in range(5): print(i)
5. 函数pythondef greet(name): print(fHello, {name}!)
greet(Alice)
6. 条件语句pythonif x > 0: print(x is positive)elif x==0: print(x is zero)else: print(x is negative)
7. 文件操作pythonwith open(example.txt, r) as f: content=f.read() print(content)
这些是Python中的一些基本操作,但在实际应用中,我们可能会遇到更多复杂的情况。希望这篇文章能帮助大家更好地理解和应用Python。
第一次碰到这个问题的时候,确实不知道该怎么办,后来请教了一个大神,加上自己的理解,才了解是什么意思,这个东西写python的会经常用到,而且会特别频繁,在此写一篇博客,希望可以帮到一些朋友。
例:一个字符串 “abcdacsdnd”
①懒惰匹配
regex = "a.*?d"
②贪婪匹配
regex = "a.*d"
测试代码:
# coding=UTF-8 import re str = "abcdacsdn" print("原始字符串 " + str) # 懒惰匹配 regexL = "a.*?d" print("懒惰匹配 = " + regexL) regL = re.compile(regexL) listL = re.findall(regL, str) print("懒惰匹配结果") print(listL) # 贪婪匹配 regexT = "a.*d" print("贪婪匹配 = " + regexT) regT = re.compile(regexT) listT = re.findall(regT, str) print("贪婪匹配结果") print(listT)
测试结果:
结果分析:
懒惰匹配,匹配成功两次,一次abcd,一次acsd,匹配到满足条件的abcd就停止了此次匹配,不会干扰后面的继续匹配。
贪婪匹配,匹配成功一次,只有abcdacsd,匹配到字符串后,会最大限度的占用字符串
以上两种,一个是尽量匹配最短串,一个是匹配最长串。
补充知识:python正则匹配中贪婪匹配效率比较
用例回归完成之后,一般都要生成一个summary_report.但是,发现生成报告的时间耗时很久,搜集资料发现与匹配文件内容使用的正则表达式有很大关系.
1.匹配模式说明
下图中圈住的部分,没有注释掉的使用贪婪匹配,注释掉的使用非贪婪匹配
执行时间上二者差别巨大;另外执行时间与正则表达式的长度也有关系,较长的表达式建议分段匹配.
2.贪婪匹配时间
3.非贪婪匹配时间
以上这篇python正则表达式的懒惰匹配和贪婪匹配说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。
本文共计902个文字,预计阅读时间需要4分钟。
第一次遇到这个问题时,确实感到困惑,不知道该如何解决。后来请教了一位大牛,结合自己的理解,才逐渐明白其意。这个问题的核心在于Python中的一些常用操作,虽然基础,但使用频率较高。在此,我将总结一些Python的常用操作,并特别指出一些高频使用场景,希望能帮助大家更好地理解和应用。
以下是一些Python的常用操作和场景:
1. 变量和赋值pythonx=10 # 整数y=3.14 # 浮点数name=Alice # 字符串
2. 列表操作pythonmy_list=[1, 2, 3, 4, 5]print(my_list[0]) # 输出列表第一个元素my_list.append(6) # 在列表末尾添加元素
3. 字典操作pythonmy_dict={name: Alice, age: 25}print(my_dict[name]) # 输出字典中name对应的值my_dict[city]=New York # 添加新的键值对
4. 循环pythonfor i in range(5): print(i)
5. 函数pythondef greet(name): print(fHello, {name}!)
greet(Alice)
6. 条件语句pythonif x > 0: print(x is positive)elif x==0: print(x is zero)else: print(x is negative)
7. 文件操作pythonwith open(example.txt, r) as f: content=f.read() print(content)
这些是Python中的一些基本操作,但在实际应用中,我们可能会遇到更多复杂的情况。希望这篇文章能帮助大家更好地理解和应用Python。
第一次碰到这个问题的时候,确实不知道该怎么办,后来请教了一个大神,加上自己的理解,才了解是什么意思,这个东西写python的会经常用到,而且会特别频繁,在此写一篇博客,希望可以帮到一些朋友。
例:一个字符串 “abcdacsdnd”
①懒惰匹配
regex = "a.*?d"
②贪婪匹配
regex = "a.*d"
测试代码:
# coding=UTF-8 import re str = "abcdacsdn" print("原始字符串 " + str) # 懒惰匹配 regexL = "a.*?d" print("懒惰匹配 = " + regexL) regL = re.compile(regexL) listL = re.findall(regL, str) print("懒惰匹配结果") print(listL) # 贪婪匹配 regexT = "a.*d" print("贪婪匹配 = " + regexT) regT = re.compile(regexT) listT = re.findall(regT, str) print("贪婪匹配结果") print(listT)
测试结果:
结果分析:
懒惰匹配,匹配成功两次,一次abcd,一次acsd,匹配到满足条件的abcd就停止了此次匹配,不会干扰后面的继续匹配。
贪婪匹配,匹配成功一次,只有abcdacsd,匹配到字符串后,会最大限度的占用字符串
以上两种,一个是尽量匹配最短串,一个是匹配最长串。
补充知识:python正则匹配中贪婪匹配效率比较
用例回归完成之后,一般都要生成一个summary_report.但是,发现生成报告的时间耗时很久,搜集资料发现与匹配文件内容使用的正则表达式有很大关系.
1.匹配模式说明
下图中圈住的部分,没有注释掉的使用贪婪匹配,注释掉的使用非贪婪匹配
执行时间上二者差别巨大;另外执行时间与正则表达式的长度也有关系,较长的表达式建议分段匹配.
2.贪婪匹配时间
3.非贪婪匹配时间
以上这篇python正则表达式的懒惰匹配和贪婪匹配说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。

