我正在使用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将不会被进一步测试,即使它会产生一个 更长的整体匹配。 换句话说,' |'运营商永远不会 贪婪。要匹配文字' |',请使用\ |,或将其括在一个 字符类,如[|]。
感谢您的帮助
答案 0 :(得分:4)
如文件中所述:
这意味着一旦A匹配,B将不会被进一步测试,即使它会产生更长的整体匹配。
因此,在这种情况下,正则表达式引擎与\d
不匹配,因为您的字符串标有(
而不是\d
,因此它将匹配第二种情况\(\d,\d\)
。但是,如果您的字符串与\d
相符,则会匹配\d
:
>>> re.findall('\d|\d,\d\)', '6,7)')
['6', '7']