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之大话题小函数(1)
Oct 10 Python
Python正则表达式常用函数总结
Jun 24 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
python语言中with as的用法使用详解
Feb 23 Python
python去掉空白行的多种实现代码
Mar 19 Python
Python使用pickle模块实现序列化功能示例
Jul 13 Python
详解Python的三种可变参数
May 08 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
Feb 29 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
Apr 27 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
Nov 15 Python
python中判断数字是否为质数的实例讲解
Dec 06 Python
如何利用python实现列表嵌套字典取值
Jun 10 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下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
PHP session会话的安全性分析
2011/09/08 PHP
使用php伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
php连接mysql数据库
2017/03/21 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
2015/01/31 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
python3.4实现邮件发送功能
2018/05/28 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
python定义类self用法实例解析
2020/01/22 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
Python常用断言函数实例汇总
2020/11/30 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
精选干货:Java精选笔试题附答案
2014/01/18 面试题
社区敬老月活动实施方案
2014/02/17 职场文书
公司营业员的自我评价
2014/03/04 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA