16

在正则表达式替换模式中,反向引用看起来像\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

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

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

4

2 回答 2

20

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

于 2013-05-29T10:01:01.953 回答
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'

事实证明,这个技巧实际上在re.sub 的文档中有所描述。

于 2013-05-29T09:42:11.980 回答