Python 正则表达式奇怪的行为
我发现了一个在Python的re模块中无法解释的事情。编译 (a*)*
或 (a*|b)*
时会出现错误:
raise error, v # 表达式无效 sre_constants.error: 没有可以重复的内容
我在JavaScript中测试了这个正则表达式,结果是可以的。
这是个bug吗?
5 个回答
5
a*
可以是空的,这样就会变成 (null)*
,这对解释器来说是没有意义的。(a*|b)
也可能是空的,因为它可以计算成 (b)
或者 (a*)
。你可以使用 (a+)*
,这样就可以得到 (a+|b)*
。
5
这是关于Python的一个问题。
你可以查看这个链接了解更多信息:http://bugs.python.org/issue2537
还有另一个相关链接:http://bugs.python.org/issue214033
也许“bug”这个词用得不太准确,这里可能有不同的理解方式……
9
是的,这确实是个错误(或者说是个设计上的问题)。它在抱怨,如果 a*
这个表达式什么都匹配不到,它就不知道该怎么去记录“零个或多个什么都没有”。