python正则表达式中匹配次数与贪心问题详解(+ ?*)
作者:Lynnlc2020 发布时间:2021-04-24 20:52:04
python中正则表达式中的匹配次数问题网上有很多解释,最多的就是*匹配0或者无数次,+匹配1次或无数次,?匹配0次或者1次。可是虽然这个文字描述很简单,但是真正用起来的时候大家有没有发觉还是需要谨慎使用才能发挥出这个匹配次数的真正功能,下面举几个简单例子参考:
首先是一个很简单的匹配:
字符串如下
我们直接匹配python,结果只匹配到一个
接下来我们把匹配次数的符号加进去,首先是*,结果如下:
匹配到了三处,即匹配到了所有的前缀有python的字符串
换成+再次匹配
结果和*的匹配一致,那使用过程中能否把*和+混用呢,后面我们会继续探讨,接下来看?的匹配结果:
结果只匹配到python,匹配到三次。
根据这三个字符的匹配规则,我们知道?是0次或1次,+是1次或无数次,*是0次或无数次,而?是属于非贪心匹配,*和+属于贪心匹配,所以可以解释?只匹配到python,因为0次匹配的时候就出结果了,所以它就立刻会终止匹配输出结果!
+是贪心匹配,它的结果和*是一样的,但是它和*最大的区别是不接受0次 匹配!所以当我们把匹配的关键字改变的时候,三者的结果就会截然不同:
童鞋们,看到 了吗,这次输出的结果和之前完全不同,我们可以根据之前所述的匹配规则进行解释:
1.+号的匹配为贪心,匹配次数只接受一次或者多次,此时pythonn+中的红色n如果出现在python后面出现一次的时候,立刻返回匹配成功的值,同时由于是贪心匹配,在python后面出现两个n的时候,也会返回匹配成功的值。当n为零次的时候,python是不会有返回值的!
2.*号的匹配为贪心,匹配次数接受零次一次或者多次,此时pythonn+中的红色n如果出现在python后面出现零次的时候,立刻返回匹配成功的值,同时由于是贪心匹配,在python后面出现一个n,两个n的时候,也会返回匹配成功的值。
3.?号的匹配为非贪心,匹配次数只接受零次或者一次,同时如果零次满足,则一次匹配不再继续。pythonn+中的红色n如果出现在python后面出现零次的时候,立刻返回匹配成功的值,同时由于是非贪心匹配,在python后面出现一个或者两个n的时候,也不会匹配。
所以搞懂了什么是贪心,什么是非贪心,什么是一次匹配多次匹配之后我们就可以灵活运用了:
比如下述的例子,在*和+后面加上?就是把贪心匹配更改为非贪心:
*号后面加?变成非贪心,匹配0次成功就会退出匹配
+号后面加上?变成贪心,匹配1次成功就会推出匹配
来源:https://blog.csdn.net/Lynnlc2020/article/details/120055209


猜你喜欢
- 1、空(None)表示该值是一个空对象,空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None
- 本文实例讲述了Python调用C语言的方法。分享给大家供大家参考,具体如下:Python中的ctypes模块可能是Python调用C方法中最
- LangChain是什么 如何使用经过了chatGPT,大家都知道了prompt-based learning,也明白了promp
- 最近社会猪可是火遍了大江南北,不蹭下热度可对不起它。见过手画的佩奇,见过用代码画的吗?没有?那就来看我大显身手。用python的turtle
- 很多小伙伴对 MySQL 的隔离级别一直心存疑惑,其实这个问题一点都不难,关键看怎么讲!单纯的看理论,绝对让你晕头转向,但是,如果我们通过几
- 关于@property装饰器在Python中我们使用@property装饰器来把对函数的调用伪装成对属性的访问。那么为什么要这样做呢?因为@
- 李开复曾经在年前表示,谷歌公司会在今年春节期间,对Google谷歌的搜索结果页进行“从未有过的尝试”修改,以凸显农历春节的喜庆气氛。现在,输
- 一、问题描述define function,calculate the input parameters and return the re
- 散点图,顾名思义是一些散乱的点构成的图。那么这些散乱的点有什么作用呢?散点图通过用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是
- 数据丢失(缺失)在现实生活中总是一个问题。 机器学习和数据挖掘等领域由于数据缺失导致的数据质量差,在模型预测的准确性上面临着严重的问题。 在
- 接触replication后,就开始琢磨自己要配置下试试,固然出现了很多问题:经过上网查资料也好问同学也好,终于是解决了些.现在就分享下自己
- 简介主要是尝试简单的使用pyhton的爬虫功能,于是使用有道进行尝试,并没有进行深入的诸如相关api的调用。以下是需要的POST数据代码以下
- 底层报错 error:cannot assign requested address原因 并发场景下 client 频繁请求端口建立tcp连
- 众所周知tensorflow造势虽大却很难用,因此推荐使用Keras,它缺省是基于tensorflow的,但通过修改keras.json也可
- 实训课期间忙里偷闲的学习了python的selenium包,唯一一点不好是要自己去查英文文档,明摆着欺负我这种英语不好的,想着用谷歌翻译一下
- 一、前言 此篇文章安装mysql部分没有截图,适合有一定基础的同学。安装方法是通过mysql官网下载的tar文件,解压后安装rpm文件。因为
- 这篇文章主要介绍了python re模块匹配贪婪和非贪婪模式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 在前端开发中,如果需要模拟后端数据,而又不想开发一个后端服务器, 则可以借助mock.js配置一个后端服务器来返回前端需要的数据,本文将会分
- 微信小程序开发中窗口底部tab栏切换页面很简单很方便.代码:1.app.json//app.json { "pages"
- pycharm右键新建时会有目录(文件夹)和python package两个选项,这两个到底有什么不同呢1.原来在python模块的每一个包