Skip to main content
 首页 » 编程设计

python之python 超出正则表达式代码大小限制

2024年10月24日32itcoder

我正在使用字典文件和正则表达式来更改脚本中的一些单词,但现在遇到了这个错误

Exception caught in plugin < class 'pagerprinter.plugins.tts.TTS' >
regular expression code size limit exceeded

我的字典有大约 5300 个条目:

'SE': 'South East', 
'NE': 'North East', 

您会想到将缩写更改为完整单词。平均有 6 - 8 个缩写被更改。

为此我正在使用

from abbreviations import abbreviations #mydict 
pattern = re.compile(r'\b(' + '|'.join(abbreviations.keys()) + r')\b') 
    msg = pattern.sub(lambda x: abbreviations[x.group()], msg) 

但我还使用了另外 4 个正则表达式来执行其他任务,例如从多个字符串中删除单词和数字。

我收到错误的原因是什么?如果我删除我的字典,它会起作用,如果我有 300 个条目,它会起作用。

从 Google 调查中,大多数人都说字典大小没有限制。

请您参考如下方法:

就像 L3viathan 提到的那样。您正在构建一个太长的正则表达式模式。 这一行是你的问题:

re.compile(r'\b(' + '|'.join(abbreviations.keys()) + r')\b') 

您的缩写字典增长的时间越长,正则表达式模式增长的时间就越长。您必须使用 2 个正则表达式或其他解决方案。

编辑回答下面的问题,你可以这样做:

from abbreviations import dct1, dct2, dct3 
import re 
 
for dct in (dct1, dct2, dct3): 
    pattern = re.compile(r'\b(' + '|'.join(dct.keys()) + r')\b') 
    msg = pattern.sub(lambda x: dct[x.group()], msg) 

where dct1 2 and 3 are you categories