在Python 2.7和3中,以下工作原理:
>>> re.search(r"a{1,9999}", 'aaa')
<_sre.SRE_Match object at 0x1f5d100>
Run Code Online (Sandbox Code Playgroud)
但这会给出一个错误:
>>> 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
Run Code Online (Sandbox Code Playgroud)
似乎允许的重复次数有一个上限.这是正则表达式规范的一部分,还是特定于Python的限制?如果特定于Python,是否在某处记录了实际数字,并且它在实现之间是否有所不同?
ars*_*jii 14
快速手动二进制搜索显示答案,特别是65535:
>>> re.search(r"a{1,65535}", 'aaa')
<_sre.SRE_Match object at 0x2a9a68>
>>>
>>> re.search(r"a{1,65536}", 'aaa')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/re.py", line 142, in search
return _compile(pattern, flags).search(string)
File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/re.py", line 240, in _compile
p = sre_compile.compile(pattern, flags)
File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/sre_compile.py", line 523, in compile
groupindex, indexgroup
OverflowError: regular expression code size limit exceeded
Run Code Online (Sandbox Code Playgroud)
这在这里讨论:
限制是实现细节.该模式被编译成代码然后被解释,并且恰好代码是(通常)16位,给出范围0..65535,但它使用65535表示没有限制,并且如果你实际上没有警告写65535.
和
量词使用65535表示无上限,因此".{0,65535}"等同于".*".
感谢下面评论的作者指出了一些更多的东西:
_sre.c
.(@LukasGraf)有一个恒定MAXREPEAT
在sre_constants.py
保持该最大重复值:
>>> import sre_constants
>>>
>>> sre_constants.MAXREPEAT
65535
Run Code Online (Sandbox Code Playgroud)
(@MarkkuK.和@hcwhsa)
归档时间: |
|
查看次数: |
509 次 |
最近记录: |