我正在使用字典文件和正则表达式来更改脚本中的一些单词,但现在遇到了此错误
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)
dct1 2 和 3 是您的类别
关于python - python 正则表达式代码大小超出限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33063542/