我想在我的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
库,您有什么其他想法吗?
答案 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
声明支持语言”