2012-11-16 27 views
1

我試圖在boost.python代碼中使用C++中的python正則表達式包re。下面是在我的C++應用的示例代碼片段:嵌入在C++中的boost python中的正則表達式

#include <boost/python.hpp> 


Py_Initialize(); 
object main = import("__main__"); 
object main_namespace = main.attr("__dict__"); 

object ignored = exec(
     "import re\n" 
     "def run():\n" 
     " rmatch = re.search(r'\d',r'hello3')\n" 
     " print rmatch\n" 
     "\n" 
     "print 'main module loaded'\n", main_namespace); 

object run_func = main.attr("run"); 
run_func(); 

Py_Finalize(); 

正則表達式應該簡單地拿起數字字符串hello3英寸這個確切的代碼行的作品在Python,但在嵌入式Python,rmatch總是None

會有人能夠提供一些見解,爲什麼?謝謝!

回答

1

我認爲你需要轉義反斜線:

" rmatch = re.search(r'\\d',r'hello3')\n" 

記住它越來越被C++編譯器處理後的第一。當Python掌握它時,它將看到\d是一個換行符而不是\\d\n。如果您不使用Python的原始字符串(r''),則必須將其編寫爲:

" rmatch = re.search('\\\\d','hello3')\\n" 
2

您需要將\d替換爲\\d

PS 你爲什麼不只是使用boost.regex?

+0

好問題。 Boost.Regex比Python的're'風格強大得多。 –

+0

謝謝aleguna,該解決方案的工作!原因是我需要在嵌入式python函數中評估一些表達式,所以將該表達式傳遞給我的python函數並進行模式匹配和評估就更加方便了。 – user773494