我可以在 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
例如我有这样一个字符串:
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