regex — регулярные выражения в boost python, встроенные в переполнение стека

Я пытаюсь использовать пакет регулярных выражений 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,

Сможет ли кто-нибудь объяснить, почему? Спасибо!

1

Решение

Я думаю, что вам нужно избежать обратной косой черты:

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

Помните, что сначала он обрабатывается компилятором C ++. Когда Python завладеет им, он увидит \d перевод строки вместо \\d а также \n, Если вы не использовали необработанные строки Python (r''), вы должны были бы написать это как:

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

Другие решения

вам нужно заменить \d с \\d,

PS
Почему бы вам просто не использовать boost.regex ??

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector