为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式的贪婪\非贪婪模式怎么理解?

正则表达式的贪婪\非贪婪模式怎么理解?

慕斯王 2018-08-10 09:10:58
最近在学习Python相关的正则表达式,对其中的贪婪和非贪婪模式的概念有点模糊,希望借下面几个例子,能理解一下它们的区别:例子1:为何会出现这样的结果呢?[out]12为何还多了一个空字符出来呢?In [12]: re.match(r'^(\d+)(0*)$', '102300').groups() Out[12]: ('102300', '') In [13]: >>> re.match(r'^(\d+?)(0*)$', '102300').groups() Out[13]: ('1023', '00')例子2:为什么加了?,得到的结果就不一样了呢?In [7]: import reIn [8]:  r=re.findall(r'<title.*?\/title>','<title>首页 - CK的官方网站</title>,<title>首页 - Michael翔的官方网站</title>')In [9]: rOut[9]: ['<title>首页 - CK的官方网站</title>', '<title>首页 - Michael翔的官方网站</title>']In [10]:  r=re.findall(r'<title.*\/title>','<title>首页 - CK的官方网站</title>,<title>首页 - Michael翔的官方网站</title>')In [11]: rOut[11]: ['<title>首页 - CK的官方网站</title>,<title>首页 - Michael翔的官方网站</title>']
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

d+表示找到一个或多个数字,但期望的是更长的串;d+?表示去匹配满足要求的尽可能短的串。

圆括号,表示要捕获的分组。

在这个例子中,在(\d+)会把102300都匹配完,(0*)因为可以匹配零个或者多个0,这里0个0也会被捕获,所以出现了空串。

In [12]: re.match(r'^(\d+)(0*)$', '102300').groups()
Out[12]: ('102300', '')

在这个例子中,为了匹配到尽可能短的串,就把0分给了后面的(0*)分组了。

In [13]: >>> re.match(r'^(\d+?)(0*)$', '102300').groups()
Out[13]: ('1023', '00')


查看完整回答
反对 回复 2018-09-23
  • 1 回答
  • 0 关注
  • 512 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信