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

标签 python regex dictionary

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

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/

相关文章:

c# - 字典中结构键的值相等和类键的引用相等

c++ - 定义基于模板的映射指针,以便在验证范围时将 int 解析为 enum

python - 写入文件并维护语法

python - 为什么这个函数不能正确更新变量?

Python字典键错误仅在一种特定情况下发生

regex - 在 Perl 正则表达式中转义 @

MySQL REGEXP 匹配/或字段结束

python - 如何在Python中检查路径/文件是否存在?

Python RegEx 使用具有多种模式的 re.sub

java - 如何使用 Pattern 和 Matcher 使程序输出整个单词