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