我刚刚发现http://code.google.com/p/re2,使用一个长期被忽视的方式(一个有前途的库汤普森NFA)来实现正则表达式引擎,可以是数量级比AWK的可用引擎更快,Perl或Python.
所以我下载了代码并做了平常的sudo make install
事情.然而,这个动作似乎只是添加/usr/local/include/re2/re2.h
到我的系统.似乎有一些``` .afile in addition, but then what is it with this
.a``扩展名?
我想使用Python中的re2(最好是Python 3.1)并很高兴看到像make_unicode_groups.py
发行版中的文件(可能只是在构建过程中使用?).然而,那些没有部署在我的机器上.
我如何使用Python的re2?
更新两个友好的人已经指出,我可以尝试从源代码构建DLLs/*.so文件,然后使用Python的ctypes
库来访问它们.任何人都可以提供有用的指示如何做到这一点?我在这里几乎一无所知,尤其是第一部分(构建*.so文件).
更新我也张贴了这个问题(前面)的RE2开发者群体,没有回答到现在(这是一小群),今天的(有些人口较多)comp.lang.py组[-thread这里- ].希望来自不同角落的人们可以相互联系.我的猜测是技术娴熟的人可以在他们的20%你的免费时间属于谷歌太时间片的几个小时内做到这一点; 这会让我筋疲力尽.是否有一个工具可以自动将C++愚蠢地转换为Python需要能够连接的任何C语言?然后可能会得到一个可行的结果可以简化为聪明的工具链.
(咆哮)为什么这么难?认为在2010年我们仍然不能拥有我们丰富的软件,只是互相交谈.这是一个障碍,每当你想要从Python处理一些C代码时,你必须总是抓住这些链接位.这需要大量工作,但只提供特定于C代码版本和Python版本的扩展模块,因此它可以快速老化.(/ rant) 是否可以在不同的进程中运行这些东西(如果我有一个re2可执行文件,可以产生数据的结果,比如说,subprocess/Popen/communicate()
)?(这不应该是一个纯粹的命令行工具,就必须在每次需要时的处理的开口,但连续运行的单个PROCESSS;也许存在包装之类的"丑化"这样的C代码).
David Reiss为re2编写了一个Python包装器.它没有Python的re模块的所有功能,但它是一个开始.它可以在这里找到:http://github.com/facebook/pyre2.
可能是的,很容易没有.查看re2.h,这是一个作为类公开的C++库.有两种方法可以从Python中使用它.
1.)正如Tuomas所说,将其编译为DLL/so并使用ctypes.但是,为了从python中使用它,您需要将对象init和方法包装成c样式的externed函数.我在过去通过外部函数传递指向周围对象的ctypes来完成此操作."init"函数返回一个void指针,指向在每个后续方法调用中传递的对象.确实非常混乱.
2.)将它包装成一个真正的python模块.再次暴露给python的那些函数需要是extern"C".一种选择是使用Boost.Python,这将简化这项工作.