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遍历目录的4种方法实例介绍
Apr 13 Python
python通过cookie模拟已登录状态的初步研究
Nov 09 Python
Python实现的下载网页源码功能示例
Jun 13 Python
python实现QQ批量登录功能
Jun 19 Python
Django urls.py重构及参数传递详解
Jul 23 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
Nov 19 Python
flask框架自定义url转换器操作详解
Jan 25 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 Python
用python制作个音乐下载器
Jan 30 Python
Python 使用dict实现switch的操作
Apr 07 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 29 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 获取远程文件内容的函数代码
2010/03/24 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
PHP用swoole+websocket和redis实现web一对一聊天
2019/11/05 PHP
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
python实现发送和获取手机短信验证码
2016/01/15 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
市场营销毕业生自荐信
2013/11/23 职场文书
房地产销售计划书
2014/01/10 职场文书
幼儿园教师培训制度
2014/01/16 职场文书
增员口号大全
2014/06/18 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
导游词之广州陈家祠
2019/10/21 职场文书
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL