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

时间:2015-01-25 03:46:04

标签: python regex function 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'\19', s)

在匹配的整数数字的末尾追加9。但是,我想在\1上应用更通用的内容。

如果我定义一个函数:

def f(i):
    return i + 1

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

1 个答案:

答案 0 :(得分:8)

除了拥有替换字符串外,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。该函数采用单个匹配对象   参数,并返回替换字符串。