0

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

Hello I am 'v0' to be added

我想将其更改为:

Hello I am 'v1' to be added

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

re.sub(r'(\W)v\d+(\W)', r'\1vnew\2', 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()

4

1 回答 1

2

您可以通过使用 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
于 2020-02-07T03:56:17.543 回答