在Cython中使用regex.h C库

时间:2012-06-18 12:13:01

标签: python regex external cython

我想在我的Cython代码中使用regex.h库,因为内置re模块似乎非常慢但是我在执行它时遇到了很多麻烦。我知道我必须在我的代码中创建一个.pxd文件并将其用作外部模块,但我是Python / Cython的新手。

这是我的regex.pxd文件:

cdef extern from *:
    ctypedef char const_char "const char"

cdef extern from "regex.h" nogil:
    int regcomp(regex_t* PREG, const char* REGEX, int CFLAGS)
    int regexec(const regex_t *PREG, const char *STRING, size_t NMATCH, regmatch_t   PMATCH[], int EFLAGS)

我正在运行命令:$python setup.py build_ext --inplace

我在执行后出现此错误:

regex.pxd:6:27: Expected ')', found '*'

关于如何在regex.h代码中使用Cython库,您有什么其他想法吗?

2 个答案:

答案 0 :(得分:1)

从以前的经验来看,我认为const说明符令人不安。来自interfacing with external C code上的Cython文档,引用C头文件

  

不要使用const。 Cython对const一无所知,所以就把它留下来吧。大多数情况下这不应该导致任何问题,尽管在极少数情况下你可能不得不使用演员表。

我将您的代码复制到我的机器上的.pxd文件中,Cython也出现了同样的错误。删除const位可以消除该错误。

答案 1 :(得分:1)

升级到Cython 0.18或更高版本。 (注意:在发布之前询问了问题)

相关的release note from that version是“C const声明支持语言”