【发布时间】:2011-05-28 10:02:00
【问题描述】:
需要使用一组不同的命名正则表达式来解析行集。
每一行都通过每个正则表达式,直到找到匹配。 当找到匹配时,代码应该为每一行返回/产生(命名的正则表达式,值)对。
文件大小超过 2GB,因此我正在寻找一些想法来提高解析器的速度。
目前代码是通过 python 执行的,但该部分可以更改。 一种选择是将所有内容都转换为 C 以从 PCRE 和更快的(?) IO 中获得更快的速度,但这是一条在未来难以维护的缓慢路线。
我正在寻找实用的解决方案,例如:
- 将解析器转换为更快的语言
- 迁移到 cython (?)
- 将文件拆分成多个块并在几个线程之上运行
【问题讨论】:
-
“解析”这个词不是暗示您不得使用正则表达式吗?它们不适合任何类型的解析。
-
别挑剔了,我需要解决问题,如果你有更好的词来解释我的问题,请提出建议。
-
我建议的是更好的解决方案,而不是更好的词。使用任何适当的解析器生成器,编写自己的简单递归下降解析器,无论如何,但不要使用正则表达式进行解析,它们不是为此目的而设计的。您可以将它们用于词法分析,如果您的所有模式共享同一组可能的词法标记,那么您将获得线性扫描速度。
-
我必须承认你有一个观点。你能推荐一些我可以与 python / linux 组合使用的解析器生成器吗?毕竟指向这一点是为了让这一切更快......
-
正如您所说,您可能会考虑选择另一种语言 - 因此,可以选择 lex 和 yacc 的旧组合(两者都快如闪电)。否则,有很多选择,包括 PLY、Yapps 以及来自 wiki.python.org/moin/LanguageParsing 的所有东西
标签: python parsing optimization text-parsing