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执行外部程序的常用方法小结
Mar 21 Python
pygame学习笔记(1):矩形、圆型画图实例
Apr 15 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
Apr 11 Python
python对列进行平移变换的方法(shift)
Jan 10 Python
python 批量添加的button 使用同一点击事件的方法
Jul 17 Python
python单线程下实现多个socket并发过程详解
Jul 27 Python
Python range、enumerate和zip函数用法详解
Sep 11 Python
Python求正态分布曲线下面积实例
Nov 20 Python
python ETL工具 pyetl
Jun 07 Python
python如何求圆的面积
Jul 01 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
Jul 05 Python
如何利用Python动态模拟太阳系运转
Sep 04 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 imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
js的Boolean对象初始值示例
2014/03/04 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
2018/09/19 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
基于Vue SEO的四种方案(小结)
2019/07/01 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python函数返回值实例分析
2015/06/08 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Django 使用logging打印日志的实例
2018/04/28 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
python全栈开发语法总结
2020/11/22 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
装修致歉信
2014/01/15 职场文书
股份合作协议书范本
2014/04/14 职场文书
会计专业自荐书
2014/07/08 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
MySQL创建管理子分区
2022/04/13 MySQL