我正在使用dict文件和正则表达式来更改脚本中的某些单词但现在遇到此错误
插件中出现异常< class'pagerprinter.plugins.tts.TTS'>
超出正则表达式代码大小限制
我的dict有大约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个条目就可以使用它。
从谷歌调查大多数人都说dict大小没有限制。
答案 0 :(得分:2)
正如L3viathan所提到的那样。你正在构建一个长期的正则表达式模式。 这一行是你的问题:
re.compile(r'\b(' + '|'.join(abbreviations.keys()) + r')\b')
缩写词dict越长,正则表达式增长的时间越长。您必须使用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是你的类别