Python无法编译该正则表达式。 sre_constants.error:没有什么可重复的

时间:2013-04-11 04:48:19

标签: python regex

我正在将C#函数转换为Python。对于与存在功能兼容的bug应该是bug。

这是该函数的正则表达式:http://[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+([-A-Z0-9a-z_$.+!*()/\\\,:;@&=?~#%]*)*。但Python无法编译它:

>>> re.compile(r"http://[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+([-A-Z0-9a-z_$.+!*()/\\\,:;@&=?~#%]*)*")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.3/re.py", line 214, in compile
    return _compile(pattern, flags)
  File "/usr/lib/python3.3/re.py", line 281, in _compile
    p = sre_compile.compile(pattern, flags)
  File "/usr/lib/python3.3/sre_compile.py", line 498, in compile
    code = _code(p, flags)
  File "/usr/lib/python3.3/sre_compile.py", line 483, in _code
    _compile(code, p.data, flags)
  File "/usr/lib/python3.3/sre_compile.py", line 75, in _compile
    elif _simple(av) and op is not REPEAT:
  File "/usr/lib/python3.3/sre_compile.py", line 362, in _simple
    raise error("nothing to repeat")
sre_constants.error: nothing to repeat

注意:该正则表达式的JavaScript版本为:/http:\/\/[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+([-A-Z0-9a-z\$\.\+\!\_\*\(\)\/\,\:;@&=\?~#%]*)*/gi

我搜索了nothing to repeat错误,但没有得到任何结果。 对不起,这是一个重复的帖子。

问题出在哪里?

2 个答案:

答案 0 :(得分:10)

我用以下内容复制了错误:

re.compile(r"([A]*)*")

问题是[A]*可能与空字符串匹配。猜猜当([A]*)*为空时尝试匹配[A]*时会发生什么? “没有什么可重复的”。不过,正则表达式引擎不会等待实际发生。它失败了,因为这种情况甚至可以远程发生。

这应该适合你:

r"http://[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+([-A-Z0-9a-z_$.+!*()/\\\,:;@&=?~#%]*)"

我刚删除了最后一个*

答案 1 :(得分:0)

以下正则表达式出现了同样的错误:

re.compile(r'(?P<term>[0-9]{1,2})-(?P<features>[A-Za-z\:]*)?')

这是&#39;?&#39;最后导致错误。严格来说,这不是重复,事实上,这与python 2.7.9一样正常(应该如此)。但是,从python 2.7.3开始出现了这个bug。