假设我有如下字符串:
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
。函数接受一个匹配对象参数,并返回替换字符串。