eal*_*nso 9 python regex capture optional
import re
str='abc defg'
m1 = re.match(".*(def)?",str)
m2 = re.match(".*(def)",str)
print (m1.group(1),m2.group(1))
Run Code Online (Sandbox Code Playgroud)
以上的输出是:
(没有,'def')
到底是怎么回事?即使使用非贪婪的重复运算符,(def)?
也不会匹配可选的捕获组.
Ilm*_*nen 13
下面是当正则表达式引擎尝试匹配会发生什么.*(def)
反对abc defg
:
.*
最初尝试匹配尽可能多的次数,匹配整个字符串.(def)
,这.*
仅在匹配时发生abc
.但是,如果我们将正则表达式更改为,则会.*(def)?
发生以下情况:
.*
尽可能多的匹配整个字符串.(def)?
是贪婪的,如果可能,引擎会更喜欢匹配它,但它不会回溯早期的子模式只是为了看它是否可以.相反,它只是让.*
吞噬整个字符串,没有留下任何东西(def)?
.类似的事情发生在.*?(def)
和.*?(def)?
:
.*?
尝试尽可能少地匹配,即根本不匹配.(def)
无法比拟,但(def)?
可以.因此,对于(def)
正则表达式引擎必须返回并考虑更长的匹配,.*?
直到它找到一个允许完整模式匹配,而因为(def)?
它不必这样做,所以它不会.有关更多信息,请参阅Perl正则表达式手册的"组合RE部分"部分(与Python的"Perl兼容"正则表达式的行为相匹配).
归档时间: |
|
查看次数: |
3381 次 |
最近记录: |