249

我该如何foobar替换foo123bar

这不起作用:

>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'

这有效:

>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'

我认为当有类似的东西时这是一个常见的问题\number。谁能给我一个关于如何处理这个问题的提示?

4

1 回答 1

413

答案是:

re.sub(r'(foo)', r'\g<1>123', 'foobar')

文档的相关摘录:

除了如上所述的字符转义和反向引用之外,\g 将使用与名为 name 的组匹配的子字符串,如 (?P...) 语法所定义。\g 使用对应的组号;因此,\g<2> 等价于 \2,但在诸如 \g<2>0 之类的替换中并没有歧义。\20 将被解释为对第 20 组的引用,而不是对第 2 组的引用,后跟文字字符“0”。反向引用 \g<0> 替换 RE 匹配的整个子字符串。

于 2011-05-12T21:28:30.517 回答