如何将
foobar
替换为 foo123bar
?
这不起作用:
>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'
这有效:
>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'
答案是:
re.sub(r'(foo)', r'\g<1>123', 'foobar')
相关摘录自docs:
除了如上所述的字符转义和反向引用之外,
还将使用名为\g<name>
的组匹配的子字符串,如name
语法所定义。(?P<name>...)
使用对应的组号;因此,\g<number>
等同于\g<2>
,但在\2
等替换中并不含糊。\g<2>0
将被解释为对组 20 的引用,而不是对组 2 的引用,后跟文字字符\20
。反向引用'0'
替换 RE 匹配的整个子字符串。\g<0>