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 19 Python
简洁的十分钟Python入门教程
Apr 03 Python
Python正则表达式教程之三:贪婪/非贪婪特性
Mar 02 Python
神经网络理论基础及Python实现详解
Dec 15 Python
python读取文本绘制动态速度曲线
Jun 21 Python
Python实现iOS自动化打包详解步骤
Oct 03 Python
用Python编写一个高效的端口扫描器的方法
Dec 20 Python
int在python中的含义以及用法
Jun 27 Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 Python
Python for i in range ()用法详解
Sep 18 Python
Flask缓存静态文件的具体方法
Aug 02 Python
Python环境配置实现pip加速过程解析
Nov 27 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中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
五个PHP程序员工具
2008/05/26 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
php使用正则验证中文
2016/04/06 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
javascript 禁止复制网页
2009/06/11 Javascript
JS中Iframe之间传值的方法
2013/03/11 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
使用Angular CLI生成路由的方法
2018/03/24 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
Python虚拟环境的原理及使用详解
2019/07/02 Python
基于Python安装pyecharts所遇的问题及解决方法
2019/08/12 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
美国第一大药店连锁机构:Walgreens(沃尔格林)
2019/10/10 全球购物
公务员的自我鉴定
2013/10/26 职场文书
银行会计业务的个人自我评价
2013/11/02 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
Python数据分析之pandas读取数据
2021/06/02 Python
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python