在 Python 2.7 和 3 中,以下代码可以运行:
>>> re.search(r"a{1,9999}", 'aaa')
<_sre.SRE_Match object at 0x1f5d100>
但是这会导致一个错误:
>>> re.search(r"a{1,99999}", 'aaa')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/re.py", line 142, in search
return _compile(pattern, flags).search(string)
File "/usr/lib/python2.7/re.py", line 240, in _compile
p = sre_compile.compile(pattern, flags)
File "/usr/lib/python2.7/sre_compile.py", line 523, in compile
groupindex, indexgroup
RuntimeError: invalid SRE code
看起来有一个重复次数的上限。这是正则表达式规范的一部分,还是Python特定的限制?如果是Python特定的,实际数字是否有记录,并且在不同的实现之间是否有所不同?
_sre.c
中实现的。 - Lukas GrafMAXREPEAT = 65535
。 - Markku K.import sre_constants;print sre_constants.MAXREPEAT
- Ashwini Chaudharysre_constants.MAXREPEAT
在非CPython实现中不一定是限制。在PyPy 2.0.0-beta1
、Jython 2.5.1+
和IronPython 2.9.9a0
上测试len(re.search(r"a{1,999999}", "a"*(2*10**6)).group()) == 999999
成功。尽管pypy
和jython
都有sre_constants.MAXREPEAT==65535
,但这个方法仍然有效。 - DSM