我正在尝试在re
代码中使用C ++中的python的正则表达式包boost.python
。以下是我的C ++应用程序中的示例代码段:
#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
。
是否有人能够提供一些有关原因的见解?谢谢!
答案 0 :(得分:2)
您需要将\d
替换为\\d
。
PS 你为什么不用boost.regex ??
答案 1 :(得分:1)
我认为你需要摆脱反斜杠:
" rmatch = re.search(r'\\d',r'hello3')\n"
请记住它首先由C ++编译器处理。当Python掌握它时,它会看到\d
而不是\\d
和\n
的换行符。如果您没有使用Python的原始字符串(r''
),则必须将其写为:
" rmatch = re.search('\\\\d','hello3')\\n"