3

我想在我的 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

4

2 回答 2

2

升级到 Cython 0.18 或更高版本。(注意:该问题是在发布之前提出的)

该版本的相关发行说明const是“该语言支持C声明”

于 2014-05-14T06:51:12.523 回答
1

从以前的经验来看,我认为说明const符正在扰乱它。来自 Cython docs on interface with external C code,在引用 C 头文件下:

不要使用常量。Cython 对 const 一无所知,因此请忽略它。大多数情况下这不会造成任何问题,尽管在极少数情况下您可能不得不使用演员表。

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

于 2012-06-18T13:05:37.263 回答