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

作者:Lynnlc2020 时间:2021-04-24 20:52:04 

python中正则表达式中的匹配次数问题网上有很多解释,最多的就是*匹配0或者无数次,+匹配1次或无数次,?匹配0次或者1次。可是虽然这个文字描述很简单,但是真正用起来的时候大家有没有发觉还是需要谨慎使用才能发挥出这个匹配次数的真正功能,下面举几个简单例子参考:

首先是一个很简单的匹配:

字符串如下

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

我们直接匹配python,结果只匹配到一个

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

接下来我们把匹配次数的符号加进去,首先是*,结果如下:

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

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

匹配到了三处,即匹配到了所有的前缀有python的字符串

换成+再次匹配

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

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

结果和*的匹配一致,那使用过程中能否把*和+混用呢,后面我们会继续探讨,接下来看?的匹配结果:

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

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

 结果只匹配到python,匹配到三次。

根据这三个字符的匹配规则,我们知道?是0次或1次,+是1次或无数次,*是0次或无数次,而?是属于非贪心匹配,*和+属于贪心匹配,所以可以解释?只匹配到python,因为0次匹配的时候就出结果了,所以它就立刻会终止匹配输出结果!

+是贪心匹配,它的结果和*是一样的,但是它和*最大的区别是不接受0次 匹配!所以当我们把匹配的关键字改变的时候,三者的结果就会截然不同:

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

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

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

 童鞋们,看到 了吗,这次输出的结果和之前完全不同,我们可以根据之前所述的匹配规则进行解释:

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正则表达式中匹配次数与贪心问题详解(+ ?*)

来源:https://blog.csdn.net/Lynnlc2020/article/details/120055209

标签:正则表达式,匹配次数,贪心
0
投稿

猜你喜欢

  • 为什么相对PHP黑python的更少

    2024-05-21 10:20:51
  • 十个Golang开发中应该避免的错误总结

    2024-04-25 15:05:14
  • Python selenium页面加载慢超时的解决方案

    2022-10-15 04:37:43
  • PHP登录环节防止sql注入的方法浅析

    2023-07-21 06:41:01
  • 2009淘宝网动画节日LOGO第一季

    2009-05-18 19:11:00
  • python连接sql server乱码的解决方法

    2023-06-27 07:25:17
  • ajax返回中文乱码问题解决

    2009-04-13 16:07:00
  • python range实例用法分享

    2021-09-28 02:54:46
  • Win10+GPU版Pytorch1.1安装的安装步骤

    2023-11-01 16:52:48
  • SQL SERVER中的流程控制语句

    2024-01-12 18:25:26
  • Python实现简单的"导弹" 自动追踪原理解析

    2021-04-15 05:48:27
  • SQL Server的全文搜索功能

    2024-01-27 20:49:24
  • python之Socket网络编程详解

    2021-05-29 14:43:22
  • vue.js使用watch监听路由变化的方法

    2024-05-10 14:16:22
  • python使用tkinter模块实现文件选择功能

    2022-06-18 18:35:56
  • 微信小程序实现滑动删除效果

    2024-04-19 10:03:45
  • 妄想or未来?界面的虚拟现实化

    2010-03-01 12:53:00
  • Bootstrapvalidator校验、校验清除重置的实现代码(推荐)

    2024-04-10 13:52:57
  • MySQL复制的概述、安装、故障、技巧、工具

    2011-04-11 08:36:00
  • Python(TensorFlow框架)实现手写数字识别系统的方法

    2022-09-01 23:42:10
  • asp之家 网络编程 m.aspxhome.com