相关疑难解决方法(0)

Python的正则表达式源字符串长度

在Python正则表达式中,

re.compile("x"*50000)
Run Code Online (Sandbox Code Playgroud)

给我 OverflowError: regular expression code size limit exceeded

但是下面的一个没有得到任何错误,但它达到了100%的CPU,并在我的电脑上花了1分钟

>>> re.compile(".*?.*?.*?.*?.*?.*?.*?.*?.*?.*?"*50000)
<_sre.SRE_Pattern object at 0x03FB0020>
Run Code Online (Sandbox Code Playgroud)

这是正常的吗?

我应该假设,".*?.*?.*?.*?.*?.*?.*?.*?.*?.*?"*50000比短"x"*50000吗?

在Python 2.6,Win32上测试过

更新1:

看起来".*?.*?.*?.*?.*?.*?.*?.*?.*?.*?"*50000可以减少到.*?

那么,这个怎么样?

re.compile(".*?x"*50000)
Run Code Online (Sandbox Code Playgroud)

它确实编译,如果那个也可以减少到".*?x",它应该匹配字符串"abcx""x"单独,但它不匹配.

那么,我错过了什么吗?

更新2:

我的观点是不知道正则表达式源字符串的最大限制,我想知道"x"*50000溢出处理程序捕获的一些原因/概念,但不是".*?x"*50000.

这对我来说没有意义,这就是原因.

在溢出检查中它是缺少的东西或它只是很好或它真的溢出的东西?

任何提示/意见将不胜感激.

python regex

4
推荐指数
1
解决办法
3352
查看次数

标签 统计

python ×1

regex ×1