Kel*_*tia 10
存在一个限制因为它需要太多内存才能有效地存储完整的状态机.我要说的是,如果你的组中有超过100个组,那么在re本身或你使用它们的方式上都有问题.也许你需要拆分输入并处理较小的块或其他东西.
我找到了最简单的方法
import regex as re
Run Code Online (Sandbox Code Playgroud)
代替
import re
Run Code Online (Sandbox Code Playgroud)
正则表达式的默认_MAXCACHE是500而不是100我相信.这是我发现正则表达式比re更好的模块的众多原因之一.
我怀疑你真的需要通过下一个命令处理100个命名组或在regexp替换命令中使用它.这将是非常不切实际的.如果您只需要群组来表达丰富的条件,regexp您可以使用非分组.
(?:word1|word2)(?:word3|word4)
Run Code Online (Sandbox Code Playgroud)
包括嵌套组在内的复杂场景也是可能的.非分组组没有限制.
我不确定您到底在做什么,但是尝试使用一个组,其中包含许多OR子句...,这样(this)|(that)变成(this | that)。您可以通过传递对匹配的特定单词执行某些操作的函数来对结果进行巧妙的处理:
newContents, num = cregex.subn(lambda m: replacements[m.string[m.start():m.end()]], contents)
Run Code Online (Sandbox Code Playgroud)
如果您真的需要这么多的小组,则可能必须分阶段进行……一次通过一大批小组,然后在每个小组内通过另一次小组讨论所需的所有细节。