Я пытаюсь использовать пакет регулярных выражений Python re
изнутри C ++, внутри 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
,
Сможет ли кто-нибудь объяснить, почему? Спасибо!
Я думаю, что вам нужно избежать обратной косой черты:
" rmatch = re.search(r'\\d',r'hello3')\n"
Помните, что сначала он обрабатывается компилятором C ++. Когда Python завладеет им, он увидит \d
перевод строки вместо \\d
а также \n
, Если вы не использовали необработанные строки Python (r''
), вы должны были бы написать это как:
" rmatch = re.search('\\\\d','hello3')\\n"
вам нужно заменить \d
с \\d
,
PS
Почему бы вам просто не использовать boost.regex ??