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读写unicode文件的方法
Jul 10 Python
通过Python来使用七牛云存储的方法详解
Aug 07 Python
Python Queue模块详细介绍及实例
Dec 27 Python
python素数筛选法浅析
Mar 19 Python
Python对数据进行插值和下采样的方法
Jul 03 Python
python-opencv 将连续图片写成视频格式的方法
Jan 08 Python
Python基于scipy实现信号滤波功能
May 08 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
Python创建临时文件和文件夹
Aug 05 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 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生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
jquery创建div 实现代码
2009/04/27 Javascript
Javascript Object.extend
2010/05/18 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
jquery 插件开发备注
2010/08/27 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
JavaScript DOM基础
2015/04/13 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
2015/11/17 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
简单实现js选项卡切换效果
2017/02/09 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
python和js交互调用的方法
2020/06/23 Python
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
新学期家长寄语
2014/01/19 职场文书
简历自我评价模版
2014/01/31 职场文书
运动会通讯稿500字
2014/02/20 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
小学母亲节活动总结
2015/02/10 职场文书
2015新教师教学工作总结
2015/07/22 职场文书