我试图找出一个使用正则表达式(?(ID / NAME).......)

时间:2017-01-13 05:19:09

标签: python regex python-2.7 python-3.x

>>> 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.

2 个答案:

答案 0 :(得分:1)

<强>问题:

  1. 为什么它只匹配'xy'?
  2. \ 2总是引用组内的“x”(.......)+ ??
  3. 首先回答问题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是学习和测试不同正则表达式模式的好资源。