第一次碰到这个问题的时候,确实不知道该怎么办,后来请教了一个大神,加上自己的理解,才了解是什么意思,这个东西写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正则表达式的懒惰匹配和贪婪匹配说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍js正则表达式惰性匹配和贪婪匹配用法分析,包括了js正则表达式惰性匹配和贪婪匹配用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js正则表达式惰性匹配和贪婪匹配用法。分享给大家供大家参考,具体如下: 在讲贪婪模式和惰性模式之前,先回顾一下JS正则基础: 写法基础: ①不需要双引号,直接用//包含 => /wehfwue123123/.test(); ②反斜杠\表示转义
问题内容: 这种模式仅意味着将字符串中的所有内容抓取到数据中第一个潜在句子边界为止: 输出: 从Python文档中: re.findall(模式,字符串,标志= 0) 返回字符串中模式的所有非重叠匹配项,作为字符串列表。从左到右扫描字符串,并以找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回一个组列表;否则,返回一个列表。如果模式包含多个组,则这将是一个元组列表。空匹配项将包括在结果中,除
本文向大家介绍什么是正则的贪婪匹配?相关面试题,主要包含被问及什么是正则的贪婪匹配?时的应答技巧和注意事项,需要的朋友参考一下 匹配一个字符串没有节制,能匹配多少就去匹配多少,知道没有匹配的为止
我们得到了一些这样的内容:
我需要关于非贪婪选项的正则表达式匹配的帮助。 匹配模式为: 要匹配的文本是: 我在上测试http://regexpal.com 此表达式匹配 ,没有成功。
问题内容: 我如何制作像这样的python正则表达式,使得在给定的情况下,python匹配而不是? 我知道我可以使用代替,但是我正在寻找一种更通用的解决方案,使我的regex更加整洁。有什么办法告诉python“嘿,尽快匹配它”? 问题答案: 您寻找功能强大的吗? http://docs.python.org/3/howto/regex.html#greedy-versus-non-greedy