为什么这段代码返回'static PyObject*\npy_\x00(void)\n{'
?我认为它应该寻找第一组并替换它。另外,我没有看到\x00
来自哪里。Python中的正则表达式替换
re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',r'static PyObject*\npy_\0(void)\n{','def myfunc():')
为什么这段代码返回'static PyObject*\npy_\x00(void)\n{'
?我认为它应该寻找第一组并替换它。另外,我没有看到\x00
来自哪里。Python中的正则表达式替换
re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',r'static PyObject*\npy_\0(void)\n{','def myfunc():')
看起来像从docs for re复制的示例,只是您更改了一个部分。 您有:
r'static PyObject*\npy_\0(void)\n{'
它应该是(使用\ 1为第一组):
r'static PyObject*\npy_\1(void)\n{'
当您使用\0
,这被解释为逃逸空\x00
。如果你真的想要组0(整个子字符串与re匹配),你需要使用\g<0>
。
\0
未引用匹配的模式。它应该是\g<0>
r'static PyObject*\npy_\g<0>(void)\n{'
这导致
static PyObject*\npy_def myfunc():(void)\n{
如果你想更换第一捕获组,你可以使用\g<1>
,但\1
也会起作用。
我认为它应该寻找第一组并替换它。
它没有。 Python的re.sub
不寻找第一组并替换它,它取代了整个匹配模式。您可以分组并重新插入要保留的部分。
我认为x00来自\ 0 – PSS
uhhhh ...更多上下文? – Colleen
尝试将'\ 0'更改为'\ 1'? – perreal