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类的专用方法实例分析
Jan 09 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
wxPython实现窗口用图片做背景
Apr 25 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
May 11 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
Django之提交表单与前后端交互的方法
Jul 19 Python
django项目简单调取百度翻译接口的方法
Aug 06 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
Python三元运算与lambda表达式实例解析
Nov 30 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
TensorFlow绘制loss/accuracy曲线的实例
Jan 21 Python
Python之多进程与多线程的使用
Feb 23 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 缓存实现代码及详细注释
2010/05/16 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
linux实现php定时执行cron任务详解
2013/12/24 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
2016/05/17 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
Python中的Numpy入门教程
2014/04/26 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
Python编写一个闹钟功能
2017/07/11 Python
详解Python 切片语法
2019/06/10 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
Python time库基本使用方法分析
2019/12/13 Python
Python 防止死锁的方法
2020/07/29 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
Reformation官网:美国女装品牌
2018/09/14 全球购物
初中生三年学习生活的自我评价
2013/11/03 职场文书
校长先进事迹材料
2014/02/01 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
公司考勤管理制度
2015/08/04 职场文书
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis