说我有以下字符串:
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)
中匹配的字符串?
答案 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
。该函数采用单个匹配对象 参数,并返回替换字符串。