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

时间:2015-10-11 09:38:42

标签: python regex dictionary

我正在使用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大小没有限制。

1 个答案:

答案 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是你的类别