2013-05-28 54 views
0

爲什麼這段代碼返回'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():') 
+0

我認爲x00來自\ 0 – PSS

+0

uhhhh ...更多上下文? – Colleen

+0

嘗試將'\ 0'更改爲'\ 1'? – perreal

回答

1

看起來像從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

\0未引用匹配的模式。它應該是\g<0>

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

這導致

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

如果你想更換第一捕獲組,你可以使用\g<1>,但\1也會起作用。

0

我認爲它應該尋找第一組並替換它。

它沒有。 Python的re.sub不尋找第一組並替換它,它取代了整個匹配模式。您可以分組並重新插入要保留的部分。