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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
python简单实现计算过期时间的方法
Jun 09 Python
python3利用tcp实现文件夹远程传输
Jul 28 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
Apr 16 Python
Series和DataFrame使用简单入门
Nov 13 Python
详解python破解zip文件密码的方法
Jan 13 Python
keras打印loss对权重的导数方式
Jun 10 Python
Python Selenium模块安装使用教程详解
Jul 09 Python
Python基于execjs运行js过程解析
Nov 27 Python
详解Python牛顿插值法
May 11 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和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
提升PHP性能的21种方法介绍
2013/06/25 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
使用js 设置url参数
2013/07/08 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
简单学习Python time模块
2016/04/29 Python
Python处理文本换行符实例代码
2018/02/03 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
python学生管理系统
2019/01/30 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
python try...finally...的实现方法
2020/11/25 Python
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
毕业生动漫设计求职信
2013/10/11 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
《海底世界》教学反思
2014/04/16 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
六年级作文之预言作文
2019/10/25 职场文书