假设我有如下字符串:

old_string = "I love the number 3 so much"

我想找出整数(在上面的例子中,只有一个数字,3),并用一个大于1的值替换它们,也就是说,期望的结果应该是
new_string = "I love the number 4 so much"

在python中,我可以使用:
r = re.compile(r'([0-9])+')
new_string = r.sub(r'\19', s)

在匹配的整数末尾附加一个9。不过,我想在\1上应用更一般的东西。
如果我定义一个函数:
def f(i):
    return i + 1

如何在f()上应用\1,以便用类似old_string的内容替换f(\1)中的匹配字符串?

最佳答案

除了有替换字符串之外,re.sub还允许您使用函数进行替换:

>>> import re
>>> old_string = "I love the number 3 so much"
>>> def f(match):
...     return str(int(match.group(1)) + 1)
...
>>> re.sub('([0-9])+', f, old_string)
'I love the number 4 so much'
>>>

docs开始:
re.sub(pattern, repl, string, count=0, flags=0)
如果repl是一个函数,则对每个不重叠的
出现pattern。函数接受一个匹配对象
参数,并返回替换字符串。

07-28 11:04