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中文乱码的解决方法
Nov 04 Python
Python爬虫番外篇之Cookie和Session详解
Dec 27 Python
python根据unicode判断语言类型实例代码
Jan 17 Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 Python
对Python2与Python3中__bool__方法的差异详解
Nov 01 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
python实现接口并发测试脚本
Jun 25 Python
关于PyTorch源码解读之torchvision.models
Aug 17 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
基于Python数据分析之pandas统计分析
Mar 03 Python
解决paramiko执行命令超时的问题
Apr 16 Python
Jmeter HTTPS接口测试证书导入过程图解
Jul 22 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的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
php生成curl命令行的方法
2015/12/14 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
javascript web页面刷新的方法收集
2009/07/02 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
JS实现字符串翻转的方法分析
2018/08/31 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
Python制作动态字符图的实例
2019/01/27 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
加拿大时尚少女服装品牌:Garage
2016/10/10 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
2015中学教学工作总结
2015/07/22 职场文书
技术入股合作协议书
2016/03/21 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL
MySQL学习之基础命令实操总结
2022/03/19 MySQL
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers
浅谈Node的内存泄露问题
2022/05/06 NodeJs