python正则表达式的懒惰匹配和贪婪匹配说明


Posted in Python onJuly 13, 2020

第一次碰到这个问题的时候,确实不知道该怎么办,后来请教了一个大神,加上自己的理解,才了解是什么意思,这个东西写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)

测试结果:

python正则表达式的懒惰匹配和贪婪匹配说明

结果分析:

懒惰匹配,匹配成功两次,一次abcd,一次acsd,匹配到满足条件的abcd就停止了此次匹配,不会干扰后面的继续匹配。

贪婪匹配,匹配成功一次,只有abcdacsd,匹配到字符串后,会最大限度的占用字符串

以上两种,一个是尽量匹配最短串,一个是匹配最长串。

补充知识:python正则匹配中贪婪匹配效率比较

用例回归完成之后,一般都要生成一个summary_report.但是,发现生成报告的时间耗时很久,搜集资料发现与匹配文件内容使用的正则表达式有很大关系.

1.匹配模式说明

下图中圈住的部分,没有注释掉的使用贪婪匹配,注释掉的使用非贪婪匹配

python正则表达式的懒惰匹配和贪婪匹配说明

执行时间上二者差别巨大;另外执行时间与正则表达式的长度也有关系,较长的表达式建议分段匹配.

2.贪婪匹配时间

python正则表达式的懒惰匹配和贪婪匹配说明

3.非贪婪匹配时间

python正则表达式的懒惰匹配和贪婪匹配说明

以上这篇python正则表达式的懒惰匹配和贪婪匹配说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python实现strcmp函数功能示例
Mar 25 Python
在RedHat系Linux上部署Python的Celery框架的教程
Apr 07 Python
用Python实现服务器中只重载被修改的进程的方法
Apr 30 Python
python获取文件扩展名的方法
Jul 06 Python
python中实现延时回调普通函数示例代码
Sep 08 Python
python编程羊车门问题代码示例
Oct 25 Python
python读取csv和txt数据转换成向量的实例
Feb 12 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
Python各种扩展名区别点整理
Feb 27 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
Python爬虫实战之爬取携程评论
Jun 02 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 #Python
对python中list的五种查找方法说明
Jul 13 #Python
使用Python项目生成所有依赖包的清单方式
Jul 13 #Python
Python判断远程服务器上Excel文件是否被人打开的方法
Jul 13 #Python
Python依赖包迁移到断网环境操作
Jul 13 #Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 #Python
python--shutil移动文件到另一个路径的操作
Jul 13 #Python
You might like
基于PHP对XML的操作详解
2013/06/07 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
推荐几个开源的微信开发项目
2014/12/28 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
React Native验证码倒计时工具类分享
2017/10/24 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
在Linux下调试Python代码的各种方法
2015/04/17 Python
python调用API实现智能回复机器人
2018/04/10 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
python访问hdfs的操作
2020/06/06 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
Oracle性能调优原则
2012/05/03 面试题
安全生产知识竞赛活动总结
2014/07/07 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
volatile保证可见性及重排序方法
2022/08/05 Java/Android