python re.sub group:\number后面的数字

zhi*_*ang 154 python regex numbers regex-group

我怎么能代替foobarfoo123bar

这不起作用:

>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'
Run Code Online (Sandbox Code Playgroud)

这有效:

>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'
Run Code Online (Sandbox Code Playgroud)

我认为这是一个常见的问题\number.任何人都可以给我一个如何处理这个问题的提示吗?

Joh*_*Jr. 272

答案是:

re.sub(r'(foo)', r'\g<1>123', 'foobar')
Run Code Online (Sandbox Code Playgroud)

文档的相关摘录:

除了如上所述的字符转义和反向引用之外,\ g还将使用由名为name的组匹配的子字符串,由(?P ...)语法定义.\ g使用​​相应的组号; 因此,\ g 2等于\ 2,但在诸如\ g 2的替换中不是模糊的.\ 20将被解释为对组20的引用,而不是对组2的引用,后跟文字字符"0".反向引用\ g <0>替换RE匹配的整个子字符串.

  • 不要对自己这么难.它[埋在文档中](https://docs.python.org/2/library/re.html#module-contents)到目前为止,大多数人需要更多的时间阅读文档而不是谷歌他们的问题,并在SO上提出这个答案. (32认同)