我可以在 Regex 捕获组中引用一个数字,对其进行操作,然后将其替换回去吗?

Can I reference a number in Regex capture group, manipulate it, and then replace it back?

例如我有这样一个字符串:

Hello I am 'v0' to be added

我想改成:

Hello I am 'v1' to be added

所以我试图用下面的方法替换 'v0'

re.sub(r'(\W)v\d+(\W)', r'vnew', string)

然后我得到:

Hello I am 'vnew' to be added

但是我不知道如何在这里操作数字。

显然 re.sub(r'(\W)v(\d+)(\W)', rf'v{int()+1}', string) 不起作用,因为 SyntaxError: f-string expression part cannot include a backslash.

除了在单独的步骤中执行这些操作之外还有什么想法,即捕获数字,将其添加并将其更改为字符串,然后再执行 re.sub()?

您可以使用 lambda 函数替换值来递增匹配的数字。请注意,您还可以通过使用环视来简化代码,以避免匹配 v:

之后的数字以外的任何内容
import re

s = 'Hello I am \'v0\' to be added'
s = re.sub(r'(?<=\Wv)\d+(?=\W)', lambda m: str(int(m.group(0)) + 1), s)
print(s)

输出

Hello I am 'v1' to be added