1

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です。

誰かがその理由について何らかの洞察を提供できるでしょうか?ありがとう!

4

2 に答える 2

2

に置き換える必要があり\dます\\d

PSなぜあなたは単にboost.regexを使わないのですか?

于 2012-11-16T15:49:31.227 に答える
1

バックスラッシュをエスケープする必要があると思います。

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

最初にC++コンパイラによって処理されることを忘れないでください。Pythonがそれを取得すると、 and\dの代わりに改行が表示されます。Pythonの生の文字列()を使用していない場合は、次のように記述する必要があります。\\d\nr''

"    rmatch = re.search('\\\\d','hello3')\\n"
于 2012-11-16T15:58:40.230 に答える