2012-06-18 24 views
2

我想在我的Cython代碼中使用regex.h庫,因爲內置re模塊似乎非常慢,但我在執行它時遇到了很多麻煩。我明白,我要創建一個.pxd文件,並把它作爲我的代碼的外部模塊,但我在Python /用Cython真正的新..在Cython中使用regex.h C庫

這是我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 '*' 

關於如何在我的Cython代碼中使用regex.h庫,您有任何其他想法嗎?

回答

1

從以前的經驗,我認爲const說明符是令人不安的。從interfacing with external C code在用Cython文檔,下引用C頭文件

不要使用常量。 Cython不知道任何關於const的東西,所以就把它拋開。大多數情況下,這不應該導致任何問題,儘管在極少數情況下您可能需要使用演員陣容。

我將您的代碼複製到我的機器上的.pxd文件中,並且Cython給出了相同的錯誤。刪除const位消除了該錯誤。

1

升級到Cython 0.18或更高版本。 (注:這個問題是該版本之前問)

相關release note from that version

「C const聲明的語言都支持」