0

为什么此代码返回'static PyObject*\npy_\x00(void)\n{'?我认为它应该寻找第一组并替换它。另外,我看不到它\x00来自哪里。

re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',r'static PyObject*\npy_\0(void)\n{','def myfunc():')
4

3 回答 3

1

看起来像从文档中复制的示例 re,除了你改变了一件。你有:

r'static PyObject*\npy_\0(void)\n{'

它应该是(对第一组使用 \1):

r'static PyObject*\npy_\1(void)\n{'

当您使用\0时,这被解释为 null 的转义\x00。如果你真的想要第 0 组(re 匹配的整个子字符串),你需要使用\g<0>.

于 2013-05-28T21:36:37.663 回答
0

\0不引用匹配的模式。它应该是\g<0>

r'static PyObject*\npy_\g<0>(void)\n{'

这导致

static PyObject*\npy_def myfunc():(void)\n{

如果要替换第一个捕获的组,可以使用\g<1>,但\1也可以。

于 2013-05-28T21:37:30.007 回答
0

我认为它应该寻找第一组并替换它。

它没有。Pythonre.sub不会查找第一组并替换它,它会替换整个匹配的模式。您可以对要保留的部件进行分组和重新插入。

于 2013-05-28T21:39:07.297 回答