Python正则表达式找到了所有的交替行为

时间:2015-07-16 21:39:52

标签: python regex findall

我正在使用Python 2.7.6。我无法理解re.findall

的以下结果
>>> re.findall('\d|\(\d,\d\)', '(6,7)')
['(6,7)']

我希望上面的内容返回['6', '7'],因为根据documentation

  

' |'

     

A | B,其中A和B可以是任意RE,创建一个常规   表达式将匹配A或B.任意数量的RE   可以用' |'分隔。通过这种方式。这可以在里面使用   小组(见下文)也是如此。扫描目标字符串时,RE   由' |'分隔从左到右尝试。当一个模式   完全匹配,该分支被接受。 这意味着一旦A   匹配,B将不会被进一步测试,即使它会产生一个   更长的整体匹配。 换句话说,' |'运营商永远不会   贪婪。要匹配文字' |',请使用\ |,或将其括在一个   字符类,如[|]。

感谢您的帮助

1 个答案:

答案 0 :(得分:4)

如文件中所述:

  

这意味着一旦A匹配,B将不会被进一步测试,即使它会产生更长的整体匹配。

因此,在这种情况下,正则表达式引擎与\d不匹配,因为您的字符串标有(而不是\d,因此它将匹配第二种情况\(\d,\d\) 。但是,如果您的字符串与\d相符,则会匹配\d

>>> re.findall('\d|\d,\d\)', '6,7)')
['6', '7']