>>> p = re.compile(r'(((x)|y)(?(2)y|x))+')
>>> p.search('yxxyyx')
<_sre.SRE_Match object; span=(2, 4), match='xy'>
我的问题: 为什么它只匹配'xy'?并且\ 2总是在组内引用“x”(.......)+ ??
编辑:谢谢你的所有答案!我找到了一个有用的网站make regex visualize.
答案 0 :(得分:1)
<强>问题:强>
首先回答问题2:
在这个正则表达式中,您正在使用:
(?(id/name)yes-pattern|no-pattern)
如果存在具有给定id或名称的组,则尝试与yes-pattern匹配,如果不存在,则尝试使用no-pattern。 no-pattern是可选的,可以省略。例如,(&lt;)?(\ w + @ \ w +(?:。\ w +)+)(?(1)&gt;)是一种糟糕的电子邮件匹配模式,它将与''以及'user @匹配host.com',但不是'
在给定((x)|y)
的正则表达式中,问题(?(2)y|x))+
之前只有一个组询问第二组是否匹配。由于只有一个组,条件将始终为false,因此将始终尝试匹配x
回答问题1:
是的,因为只有一个组,条件总是匹配x
,整个正则表达式只匹配xyx
(DOCS)
答案 1 :(得分:0)
我发现this website是学习和测试不同正则表达式模式的好资源。