2012-11-16 24 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