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 相关文章推荐
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
Jan 23 Python
python网络编程学习笔记(四):域名系统
Jun 09 Python
简单介绍Ruby中的CGI编程
Apr 10 Python
python读取二进制mnist实例详解
May 31 Python
python学生管理系统代码实现
Apr 05 Python
python复制文件到指定目录的实例
Apr 27 Python
python 识别图片中的文字信息方法
May 10 Python
对python requests的content和text方法的区别详解
Oct 11 Python
python做接口测试的必要性
Nov 20 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 Python
python实现发送带附件的邮件代码分享
Sep 22 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 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
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
如何用JavaScript定义一个类
2014/09/12 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
Python struct.unpack
2008/09/06 Python
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
浅析Python编写函数装饰器
2016/03/18 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
详解python UDP 编程
2020/08/24 Python
python zip()函数的使用示例
2020/09/23 Python
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
升职自荐信范文
2013/10/05 职场文书
小区文明倡议书
2014/05/16 职场文书
同志主要表现材料
2014/08/21 职场文书
力克胡哲观后感
2015/06/10 职场文书
紧急迫降观后感
2015/06/15 职场文书