关于网友提出的“ (javascript)正则表达式的贪婪\非贪婪模式怎么理解?”问题疑问,本网通过在网上对“ (javascript)正则表达式的贪婪\非贪婪模式怎么理解?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: (javascript)正则表达式的贪婪\非贪婪模式怎么理解?
描述:最近在学习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 re
In [8]: r=re.findall(r'','首页 - CK的官方网站,首页 - Michael翔的官方网站')
In [9]: r
Out[9]: ['首页 - CK的官方网站', '首页 - Michael翔的官方网站']
In [10]: r=re.findall(r'','首页 - CK的官方网站,首页 - Michael翔的官方网站
')
In [11]: r
Out[11]: ['首页 - CK的官方网站,首页 - Michael翔的官方网站']
解决方案1: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')
以上介绍了“ (javascript)正则表达式的贪婪\非贪婪模式怎么理解?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2950019.html