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的Twisted框架中reactor事件管理器的用法
May 25 Python
python 数据的清理行为实例详解
Jul 12 Python
详谈Numpy中数组重塑、合并与拆分方法
Apr 17 Python
使用python的pandas库读取csv文件保存至mysql数据库
Aug 20 Python
python之生产者消费者模型实现详解
Jul 27 Python
python3 map函数和filter函数详解
Aug 26 Python
python如果快速判断数字奇数偶数
Nov 13 Python
什么是python的id函数
Jun 11 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
Python OpenCV快速入门教程
Apr 17 Python
基于Python绘制子图及子图刻度的变换等的问题
May 23 Python
教你使用Python pypinyin库实现汉字转拼音
May 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 模拟$_PUT实现代码
2010/03/15 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
thinkPHP5.0框架命名空间详解
2017/03/18 PHP
php压缩文件夹最新版
2018/07/18 PHP
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
pycharm 使用心得(五)断点调试
2014/06/06 Python
python检测远程端口是否打开的方法
2015/03/14 Python
python+pandas分析nginx日志的实例
2018/04/28 Python
python3处理含有中文的url方法
2018/05/10 Python
python机器学习库scikit-learn:SVR的基本应用
2019/06/26 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
python re模块匹配贪婪和非贪婪模式详解
2020/02/11 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
学生自我鉴定模板
2013/12/30 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
培训计划通知
2015/07/15 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle