我试图将一个字符串中的一系列数字乘以一个常数。我有这样的东西:
my_string = 'AMOUNT="38000" AMOUNT="43000" AMOUNT="56399"'
我可以轻松做到这一点:
my_new_string = re.sub('(?<=AMOUNT\=")\d+', lambda _:str(38000 *2), my_string)
这有效,但这不是我所需要的。
我需要的输出如下:
my_new_string = 'AMOUNT="76000" AMOUNT="86000" AMOUNT="112798"'
有人对如何进行有想法吗?谢谢
答案 0 :(得分:2)
您只需要进行一些修改:
re.sub('(?<=AMOUNT\=")\d+', lambda match: str(int(match.group()) * 2), my_string)
要传递给lambda
的对象是re.Match
对象,其中包含您需要的编号。现在,您只需要使用.group()
方法提取数字,转换为int * 2
并转换回str
。
答案 1 :(得分:2)
您可以通过以下方式访问lambda中的匹配组:
re.sub('(?<=AMOUNT\=")\d+', lambda m:str(int(m.group(0))*2), my_string)
答案 2 :(得分:0)
您可以定义一个自定义函数并使用f字符串:
def splitter(x):
key, val = x.split('=')
return f'{key}="{int(val[1:-1])*2}"'
mystr = 'AMOUNT="38000" AMOUNT="43000" AMOUNT="56399"'
res = ' '.join(map(splitter, mystr.split()))
'AMOUNT="76000" AMOUNT="86000" AMOUNT="112798"'