有没有办法在Python的re.sub()中的替换字符串中使用正则表达式?

use*_*189 3 python regex string replace substring

re模块中的Python中有以下功能:

re.sub(pattern,repl,string,count = 0,flags = 0) - 返回通过替换repl替换字符串中最左边非重叠模式而获得的字符串.如果未找到模式,则返回字符串不变.

我发现它可以像这样工作:

print re.sub('[a-z]*\d+','lion','zebra432') # prints 'lion'
Run Code Online (Sandbox Code Playgroud)

我想知道,是否有一种简单的方法在替换字符串中使用正则表达式,以便替换字符串包含原始正则表达式/原始字符串的一部分?具体来说,我可以做这样的事情(这不起作用)?

print re.sub('[a-z]*\d+', 'lion\d+', 'zebra432')
Run Code Online (Sandbox Code Playgroud)

我想要打印'lion432'.显然,它没有.相反,它打印'lion\d+'.有没有一种简单的方法可以在替换字符串中使用匹配正则表达式的部分?

顺便说一句,这不是一个特例.请不要认为数字总是在最后,单词总是在开头,等等.我想知道一般的所有正则表达式的解决方案.

谢谢

iCo*_*dez 8

放置\d+在捕获组中(...),然后用\1它来引用它:

>>> import re
>>> re.sub('[a-z]*(\d+)', r'lion\1', 'zebra432')
'lion432'
>>>
>>> # You can also refer to more than one capture group
>>> re.sub('([a-z]*)(\d+)', r'\1lion\2', 'zebra432')
'zebralion432'
>>>
Run Code Online (Sandbox Code Playgroud)

来自文档:

反向引用(例如\6)将替换6为模式中由组匹配的子字符串.

请注意,您还需要使用原始字符串,以便\1不将其视为转义序列.