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下载文件时显示下载进度的方法
Apr 02 Python
探究python中open函数的使用
Mar 01 Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 Python
Python中工作日类库Busines Holiday的介绍与使用
Jul 06 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
python读取文件名并改名字的实例
Jan 07 Python
pytorch 归一化与反归一化实例
Dec 31 Python
python3读取autocad图形文件.py实例
Jun 05 Python
浅谈matplotlib中FigureCanvasXAgg的用法
Jun 16 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
May 12 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 和 MYSQL
2006/10/09 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
DWZ刷新dialog解决方法
2013/03/03 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
js作用域和作用域链及预解析
2019/04/11 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
2019/10/16 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python实现二维码扫码自动登录淘宝
2016/12/27 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
委托证明的格式
2014/01/10 职场文书
《值日生》教学反思
2014/02/17 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
你真的了解PHP中的引用符号(&)吗
2021/05/12 PHP
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers