如何在反向引用上应用函数?

How to apply a function on a backreference?

假设我有如下字符串:

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'', s)

在匹配的整数末尾附加一个9。但是,我想在 上应用一些更通用的东西。

如果我定义一个函数:

def f(i):
    return i + 1

如何在 上应用 f(),以便我可以将 old_string 中匹配的字符串替换为 f()?

除了替换字符串外,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)

If repl is a function, it is called for every non-overlapping occurrence of pattern. The function takes a single match object argument, and returns the replacement string.