当前位置:  开发笔记 > 编程语言 > 正文

包含100多个组的Python正则表达式?

如何解决《包含100多个组的Python正则表达式?》经验,为你挑选了5个好方法。

有没有办法超过Python中正则表达式的100组限制?此外,有人可以解释为什么有一个限制.



1> Keltia..:

存在一个限制因为它需要太多内存才能有效地存储完整的状态机.我要说的是,如果你的组中有超过100个组,那么在re本身或你使用它们的方式上都有问题.也许你需要拆分输入并处理较小的块或其他东西.


对不起,但我不同意 - 什么是"太多内存",为什么模块会硬编码这个阈值?有这种用法合理的(罕见)情况.我(遗憾地)自己遇到过这样的情况.我正在使用pyparsing解析一个复杂的语法,并且(唉)发现pyparsing太慢了.我现在正在自动生成一个正则表达式来匹配我的语法(我已经击中了硬编码的`100`砖墙).

2> zanbri..:

我找到了最简单的方法

import regex as re

代替

import re

正则表达式的默认_MAXCACHE是500而不是100我相信.这是我发现正则表达式比re更好的模块的众多原因之一.


我没有这个模块
pip install regex

3> Steven..:

如果我没有弄错的话,"新" 正则表达式模块(目前是第三方,但最终会替换stdlib中的re模块)没有这个限制,所以你可以尝试一下.



4> rolish..:

我怀疑你真的需要通过下一个命令处理100个命名组或在regexp替换命令中使用它.这将是非常不切实际的.如果您只需要群组来表达丰富的条件,regexp您可以使用非分组.

(?:word1|word2)(?:word3|word4)

包括嵌套组在内的复杂场景也是可能的.非分组组没​​有限制.


这不是问题的答案.

5> Jim Carroll..:

我不确定您到底在做什么,但是尝试使用一个组,其中包含许多OR子句...,这样(this)|(that)变成(this | that)。您可以通过传递对匹配的特定单词执行某些操作的函数来对结果进行巧妙的处理:

 newContents, num = cregex.subn(lambda m: replacements[m.string[m.start():m.end()]], contents)

如果您真的需要这么多的小组,则可能必须分阶段进行……一次通过一大批小组,然后在每个小组内通过另一次小组讨论所需的所有细节。

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有