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 Socket编程详细介绍
Mar 23 Python
Python实现螺旋矩阵的填充算法示例
Dec 28 Python
Python实现将多个空格换为一个空格.md的方法
Dec 20 Python
python 实现检验33品种数据是否是正态分布
Dec 09 Python
使用python去除图片白色像素的实例
Dec 12 Python
Python实现结构体代码实例
Feb 10 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 Python
python实现简易版学生成绩管理系统
Jun 22 Python
Python 下载Bing壁纸的示例
Sep 29 Python
Python实现Telnet自动连接检测密码的示例
Apr 16 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 Python
python实现双向链表原理
May 25 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中加密解密函数与DES加密解密实例
2014/10/17 PHP
PHP加密解密类实例分析
2015/04/20 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
jquery 模板的应用示例
2013/11/12 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
python 字符串常用函数详解
2019/09/11 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
2019/10/22 Python
Python使用扩展库pywin32实现批量文档打印实例
2020/04/09 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
"引用"与多态的关系
2013/02/01 面试题
工程师求职简历的自我评价分享
2013/10/10 职场文书
医科学校毕业生自荐信
2013/11/09 职场文书
公司开业庆典主持词
2014/03/21 职场文书
就业协议书的作用
2014/04/11 职场文书
节约每一滴水演讲稿
2014/09/09 职场文书
违反单位工作制度检讨书
2014/10/25 职场文书
配置Kubernetes外网访问集群
2022/03/31 Servers
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android