Python正则表达式替换:从数字中单独反向引用

flo*_*sla 16 python regex backreference

在正则表达式替换模式中,反向引用看起来像\1.如果要在该反向引用后包含一个数字,这将失败,因为该数字被认为是反向引用号的一部分:

# replace all twin digits by zeroes, but retain white space in between
re.sub(r"\d(\s*)\d", r"0\10", "0 1")
>>> sre_constants.error: invalid group reference
Run Code Online (Sandbox Code Playgroud)

替换模式r"0\1 0"可以正常工作,但在失败的示例中,反向引用\1被解释为\10.

如何将数字'0'\1之前的反向引用分开?

Jan*_*ila 20

您可以使用\g<1>,如文档所述.


flo*_*sla 12

\1您可以使用命名组来解决问题,而不是使用带序列号()的反向引用:

# replace all twin digits by zeroes, but retain whitespace in between
re.sub(r"\d(?P<whitespace>\s*)\d", r"0\g<whitespace>0", "0 1")
>>> '0 0'
Run Code Online (Sandbox Code Playgroud)

原来这个技巧实际上是在re.sub文档中描述的.