我可以引用正则表达式捕获组中的数字,对其进行操作,然后将其替换回来吗?



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

Hello I am 'v0' to be added

我想将其更改为:

Hello I am 'v1' to be added

所以我试图用下面代替'v0'

re.sub(r'(W)vd+(W)', r'1vnew2', string)

然后现在我得到:

Hello I am 'vnew' to be added

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

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

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

您可以使用 lambda 函数替换值来递增匹配的数字。请注意,您还可以通过使用 lookarounds 来简化代码,以避免匹配除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

相关内容

最新更新