python正则表达式中匹配次数与贪心问题详解(+ ?*)

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次成功就会推出匹配

总结

到此这篇关于python正则表达式中匹配次数与贪心问题详解(+ ?*)的文章就介绍到这了,更多相关python正则匹配次数与贪心问题内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python使用正则表达式替换匹配成功的组并输出替换的次数

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数. 本章节主要介绍python使用正则表达式替换

  • python正则表达式中匹配次数与贪心问题详解(+ ?*)

    python中正则表达式中的匹配次数问题网上有很多解释,最多的就是*匹配0或者无数次,+匹配1次或无数次,?匹配0次或者1次.可是虽然这个文字描述很简单,但是真正用起来的时候大家有没有发觉还是需要谨慎使用才能发挥出这个匹配次数的真正功能,下面举几个简单例子参考: 首先是一个很简单的匹配: 字符串如下 我们直接匹配python,结果只匹配到一个 接下来我们把匹配次数的符号加进去,首先是*,结果如下: 匹配到了三处,即匹配到了所有的前缀有python的字符串 换成+再次匹配 结果和*的匹配一致,那使

  • Python正则表达式中group与groups的用法详解

    目录 1 .group函数 1.1 返回整个匹配结果 1.2 返回指定分组的匹配结果 1.3 处理没有匹配结果的情况 2. groups函数 3. group和groups的使用场景 在Python中,正则表达式的group和groups方法是非常有用的函数,用于处理匹配结果的分组信息.group方法是re.MatchObject类中的一个函数,用于返回匹配对象的整个匹配结果或特定的分组匹配结果.而groups方法同样是re.MatchObject类中的函数,它返回的是所有分组匹配结果组成的元组

  • Python正则表达式中的re.S的作用详解

    Python 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数. 本章节给大家介绍P

  • python正则表达式查找和替换内容的实例详解

    1.编写Python正则表达式字符串s. 2.使用re.compile将正则表达式编译成正则对象Patternp. 3.正则对象p调用p.search或p.findall或p.finditer查找内容. 4.正则对象p调用p.sub或p.subn替换内容. 实例 import re s = "正则表达式" p = re.compile(s) # 查找 mf1 = p.search("检测内容") mf2 = p.findall("检测内容") m

  • python多进程中的生产者和消费者模型详解

    目录 Python生产者消费者模型 一.消费模式 二.传输原理 三.实现方式 Python生产者消费者模型 一.消费模式 生产者消费者模式 是Controlnet网络中特有的一种传输数据的模式.用于两个CPU之间传输数据,即使是不同类型同一厂家的CPU也可以通过设置来使用. 二.传输原理 类似与点对点传送,又略有不同,一个生产者可以对应N个消费者,但是一个消费者只能对应一个生产者: 每个生产者消费者对应一个地址,占一个网络节点,属于预定性数据,在网络中优先级最高: 此模式如果在网络中设置过多会影

  • 对python模块中多个类的用法详解

    如下所示: import wuhan.wuhan11 class Han: def __init__(self, config): self.batch_size = config.batch_size self.num_steps = config.num_steps class config: batch_size = 10 num_steps = 50 if __name__ == '__main__': han = Han(config) print(han.batch_size) pr

  • Python时间差中seconds和total_seconds的区别详解

    如下所示: import datetime t1 = datetime.datetime.strptime("2017-9-06 10:30:00", "%Y-%m-%d %H:%M:%S") t2 = datetime.datetime.strptime("2017-9-06 12:30:00", "%Y-%m-%d %H:%M:%S") interval_time = (t2 - t1).seconds # 输入的结果:7

  • python爬虫中的url下载器用法详解

    前期的入库筛选工作已经由url管理器完成了,整理的工作自然要由url下载器接手.当我们需要爬取的数据已经去重后,下载器的主要任务的是这些数据下载下来.所以它的使用也并不复杂,不过需要借助到我们之前所学过的一个库进行操作,相信之前的基础大家都学的很牢固.下面小编就来为大家介绍url下载器及其使用的方法. 下载器的作用就是接受URL管理器传递给它的一个url,然后把该网页的内容下载下来.python自带有urllib和urllib2等库(这两个库在python3中合并为urllib),它们的作用就是

  • Python编程中*args与**kwargs区别作用详解

    相信学Python的小伙伴肯定有这样的尴尬局面,给一个函数不会用, 原因是:不知道参数列表中的类型是什么意思,比如初学者都会疑问的:*args和**kwargs到底是怎么用. 当你知道这个时,我猜你肯定能会用好多函数了! #*args的用法:当传入的参数个数未知,且不需要知道参数名称时. def func_arg(farg, *args): print("formal arg:", farg) for arg in args: print("another arg:"

  • Python pandas中apply函数简介以及用法详解

    目录 1.基本信息 2.语法结构 3.使用案例 3.1 DataFrame使用apply 3.2 Series使用apply 3.3 其他案例 4.总结 参考链接: 1.基本信息 ​ Pandas 的 apply() 方法是用来调用一个函数(Python method),让此函数对数据对象进行批量处理.Pandas 的很多对象都可以使用 apply() 来调用函数,如 Dataframe.Series.分组对象.各种时间序列等. 2.语法结构 ​ apply() 使用时,通常放入一个 lambd

随机推荐