我有一个像这样的字符串:
text = '''this \sum 1,2 \end is three and \sum 2,3,4 \end is nine'''
我有一个在字符串中添加数字的函数
def add(numbers):
return sum(map(lambda x:int(x), numbers.split(",")))
如何使用regexp通过'\\sum (.+?) \\end'
函数传递组来替换add
的所有实例?
即上面的字符串应为:
'''this 3 is three and 9 is nine'''
我可以使用"1,2"
获取"2,3,4"
和findall
并添加它们,但是如何将它们插回到它们应该去的文本中?也许是findall
和split
的组合?在python中有更简单的方法吗?
答案 0 :(得分:1)
使用re.findall()
代替re.sub()
,并使用函数处理每个组。
该函数的返回值用作替换字符串:
re.sub(r'\\sum ([\d,]+) \\end', lambda m: str(add(m.group(1))), text)
lambda
创建一个接受一个参数的函数,即匹配对象。它返回一个基于数字组的字符串,通过add()
传递。
演示:
>>> import re
>>> text = '''this \sum 1,2 \end is three and \sum 2,3,4 \end is nine'''
>>> def add(numbers):
... return sum(map(lambda x:int(x), numbers.split(",")))
...
>>> re.sub(r'\\sum ([\d,]+) \\end', lambda m: str(add(m.group(1))), text)
'this 3 is three and 9 is nine'