为什么此代码会返回'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():')
答案 0 :(得分:1)
看起来这个例子是从docs for re复制的,除了你改变了一件。 你有:
r'static PyObject*\npy_\0(void)\n{'
它应该是(第一组使用\ 1):
r'static PyObject*\npy_\1(void)\n{'
当您使用\0
时,它被解释为null \x00
的转义符。如果你真的想要组0(整个子字符串与re匹配),你需要使用\g<0>
。
答案 1 :(得分:0)
\0
未引用匹配的模式。它应该是\g<0>
r'static PyObject*\npy_\g<0>(void)\n{'
这导致
static PyObject*\npy_def myfunc():(void)\n{
如果您要替换第一个捕获的组,可以使用\g<1>
,但\1
也可以使用。
答案 2 :(得分:0)
我认为它应该寻找第一组并替换它。
没有。 Python的re.sub
不会查找第一个组并替换它,它会替换整个匹配的模式。由您来分组并重新插入您想要保留的部分。