Python正则表达式奇怪的行为

时间:2011-05-03 12:47:06

标签: python regex

我发现了一些我无法用Python re模块解释的东西。 编译(a*)*(a*|b)*会引发错误:

  

引发错误,v#无效表达式   sre_constants.error:无需重复

我已经在javascript中测试了这个正则表达式,看起来没问题。

这是一个错误吗?

5 个答案:

答案 0 :(得分:9)

是的,这是一个错误(或至少是错误的)。它抱怨如果a*没有匹配,它就不知道如何捕获0个或更多“nothings”。

答案 1 :(得分:5)

Python中的一个错误。

http://bugs.python.org/issue2537

http://bugs.python.org/issue214033

也许这个“bug”不是正确的词。不同的解释......

答案 2 :(得分:5)

a*可以为null,给予(null)*这对解释器没有意义。 (a*|b)也可以为空,因为它可以评估为(b)(a*)。您可以使用(a+)*,因此(a+|b)*

答案 3 :(得分:1)

Python实际上有一个重要原因拒绝(a*)*(a*|b)*。由于*是贪婪的,它匹配最长的字符串。问题是如果由*修改的正则表达式为空,则正则表达式解析器尝试匹配尽可能多的空字符串重复。这意味着它将匹配您测试的字符串中任意两个字符之间的任意数量的空字符串。由于a*位于捕获组中,因此必须捕获所有这些空字符串,这是不可能的。

答案 4 :(得分:0)

这似乎是一个python问题,请参阅此http://bugs.python.org/issue214033

它也在StackO上regex error - nothing to repeat