【发布时间】:2011-01-27 05:11:07
【问题描述】:
我刚刚发现了http://code.google.com/p/re2,这是一个很有前途的库,它使用一种长期被忽视的方式 (Thompson NFA) 来实现一个正则表达式引擎,它的速度比可用的 awk、Perl 或 Python 引擎快几个数量级。
所以我下载了代码并做了通常的sudo make install 事情。但是,该操作似乎只是将/usr/local/include/re2/re2.h 添加到我的系统中。似乎还有一些*.a 文件,但是这个*.a 扩展是什么?
我想使用 Python 中的 re2(最好是 Python 3.1)并且很高兴在发行版中看到像 make_unicode_groups.py 这样的文件(可能只是在构建过程中使用?)。然而,那些并没有部署在我的机器上。
如何在 Python 中使用 re2?
更新两个友好的人指出我可以尝试从源代码构建 DLLs / *.so 文件,然后使用 Python 的 ctypes 库来访问这些文件。谁能提供有用的指示如何做到这一点?我在这里几乎一无所知,尤其是第一部分(构建 *.so 文件)。
更新我也将这个问题(较早)发布到re2 developers’ group,直到现在没有回复(这是一个小团体),今天发布到(人口更多)comp.lang.py群组[—thread here—]。希望各个角落的人可以互相联系。我的猜测是一个熟练的人可以在他们的 20% your-free-time-belongs-google-too 时间片内的几个小时内做到这一点;它会束缚我好几个星期。 是否有一种工具可以自动将 C++ 简化为 Python 需要能够连接的任何 C 风格?那么也许可以将获得可行的结果简化为巧妙的工具链。
(咆哮)为什么这么难?想想2010年我们还是不能让我们丰富的软件互相交流。这是一个如此大的障碍,以至于无论何时你想从 Python 中处理一些 C 代码,你都必须总是处理这些链接位。这需要做很多工作,但只提供了一个特定于 C 代码版本和 Python 版本的扩展模块,因此它老化得很快。(/rant) 是否有可能在单独的进程中运行这些东西(比如说,如果我有一个 re2 可执行文件,它可以为传入的数据产生结果,比如说,subprocess/Popen/communicate())?(这不应该是一个纯命令行工具,需要每次需要时都打开一个进程,但只有一个进程连续运行;也许存在某种“妖魔化”此类 C 代码的包装器。
【问题讨论】:
-
+1 只是为了获得 Thompson NFA 文章的链接
-
签出re2项目中的Makefile并修改它构建一个so文件。然后将自己的文件添加到 Makefile 中,以提供 re2 和 python ctypes 之间的接口。您必须使用 -shared 选项来构建 so 文件。只需 google 即可获取 Makefile 和共享库。
-
@GregS: google("Glushkov NFA")
-
"""// 默认情况下,模式和输入文本被解释为 UTF-8。 // RE2::Latin1 选项导致它们被解释为 Latin-1。""" 看起来对我来说就像遗留软件:-(
-
顺便说一下,AWK使用的是Thompson NFA方法; GAWK 已经这样做了几十年。只有“现代”语言在这方面做得不好。