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 相关文章推荐
linux系统使用python获取cpu信息脚本分享
Jan 15 Python
python用户管理系统的实例讲解
Dec 23 Python
TensorFlow实现卷积神经网络
May 24 Python
使用python3实现操作串口详解
Jan 01 Python
使用python打印十行杨辉三角过程详解
Jul 10 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 Python
Python:合并两个numpy矩阵的实现
Dec 02 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
Apr 30 Python
keras的三种模型实现与区别说明
Jul 03 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
Pandas自定义选项option设置
Jul 25 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获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
JavaScript日历实现代码
2010/09/12 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
js密码强度校验
2015/11/10 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
2016/08/13 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
Python递归实现汉诺塔算法示例
2018/03/19 Python
python实现list由于numpy array的转换
2018/04/04 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
对python函数签名的方法详解
2019/01/22 Python
python使用KNN算法识别手写数字
2019/04/25 Python
python十进制转二进制的详解
2020/02/07 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
如何设置Java的运行环境
2013/04/05 面试题
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
外贸业务员的岗位职责
2013/11/23 职场文书
德语专业求职信
2014/03/12 职场文书
学生保证书范文
2014/04/28 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书