python re模块匹配贪婪和非贪婪模式详解


Posted in Python onFebruary 11, 2020

这篇文章主要介绍了python re模块匹配贪婪和非贪婪模式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

python贪婪和非贪婪

正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪则相反,总是尝试匹配尽可能少的字符。在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。

>>> s="This is a number 234-235-22-423"
>>> r=re.match(".+(\d+-\d+-\d+-\d+)",s)
>>> r.group(1)
'4-235-22-423'
>>> r=re.match(".+?(\d+-\d+-\d+-\d+)",s)
>>> r.group(1)
'234-235-22-423'
>>>

正则表达式模式中使用到通配字,那它在从左到右的顺序求值时,会尽量“抓取”满足匹配最长字符串,在我们上面的例子里面,“.+”会从字符 串的启始处抓取满足模式的最长字符,其中包括我们想得到的第一个整型字段的中的大部分,“\d+”只需一位字符就可以匹配,所以它匹配了数字“4”,而“.+”则匹配了从字符串起始到这个第一位数字4之前的所有字符。

解决方式:非贪婪操作符“?”,这个操作符可以用在"*","+","?"的后面,要求正则匹配的越少越好。

下面这个例子仔细体会下

>>> re.match(r"aa(\d+)","aa2343ddd").group(1)
'2343'
>>> re.match(r"aa(\d+?)","aa2343ddd").group(1)
'2'
>>> re.match(r"aa(\d+)ddd","aa2343ddd").group(1) 
'2343'
>>> re.match(r"aa(\d+?)ddd","aa2343ddd").group(1)
'2343'
>>>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python条件和循环的使用方法
Nov 01 Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
Oct 11 Python
python实现简单的计时器功能函数
Mar 14 Python
Django中使用locals()函数的技巧
Jul 16 Python
Python使用当前时间、随机数产生一个唯一数字的方法
Sep 18 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
python装饰器练习题及答案
Nov 01 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
Python搭建Keras CNN模型破解网站验证码的实现
Apr 07 Python
详解Python的三种拷贝方式
Feb 11 #Python
Python @property原理解析和用法实例
Feb 11 #Python
如何使用Python发送HTML格式的邮件
Feb 11 #Python
python模式 工厂模式原理及实例详解
Feb 11 #Python
Python3搭建http服务器的实现代码
Feb 11 #Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 #Python
python线程join方法原理解析
Feb 11 #Python
You might like
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
a标签click和href执行顺序探讨
2014/06/23 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
详解Python中的正则表达式的用法
2015/04/09 Python
详解python中asyncio模块
2018/03/03 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
Python装饰器用法实例总结
2018/05/26 Python
Python元组常见操作示例
2019/02/19 Python
python实现PID算法及测试的例子
2019/08/08 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
python Xpath语法的使用
2020/11/26 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
英国网上电器商店:Electricshop
2020/03/15 全球购物
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
应届大学生简历中的自我评价
2014/01/15 职场文书
小学生元旦感言
2014/02/26 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
自强之星事迹材料
2014/05/12 职场文书
工地安全标语
2014/06/07 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
复兴之路观后感
2015/06/02 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA