爲什麼這段代碼返回'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