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 dict remove数组删除(del,pop)
Mar 24 Python
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
Python的Django框架中模板碎片缓存简介
Jul 24 Python
Python中防止sql注入的方法详解
Feb 25 Python
Python利用递归和walk()遍历目录文件的方法示例
Jul 14 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
TensorFlow实现RNN循环神经网络
Feb 28 Python
对python抓取需要登录网站数据的方法详解
May 21 Python
python 文件转成16进制数组的实例
Jul 09 Python
python单线程下实现多个socket并发过程详解
Jul 27 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
Mar 14 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
php5数字型字符串加解密代码
2008/04/24 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
php将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
尽可能写"友好"的"Javascript"代码
2007/01/09 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
解决axios post 后端无法接收数据的问题
2019/10/29 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
Python3 处理JSON的实例详解
2017/10/29 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
python动态进度条的实现代码
2019/07/03 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
师德师风整改措施
2014/10/24 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
新郎答谢词
2015/01/04 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
2016国庆促销广告语
2016/01/28 职场文书
MySQL 分组查询的优化方法
2021/05/12 MySQL
python实现手机推送 代码也就10行左右
2022/04/12 Python