2012-11-20 73 views
1

我有一個字符串,我想查找並替換其中的一些數字。即,在那裏有多個「v = 324 \ n」的重複,具有不同的值。現在我想將所有這些數字除以n(四捨五入爲最接近的整數)並將其另存爲新字符串。Python根據模式查找並替換數字

在我使用解析包的那一刻:

n = 10 
s = "this is v = 2342\n and another v = 231\n and some stuff..." 
for r in findall("v = {:d}\\n", s): 
    print r 

這給了我結果的列表,但我不知道如何修改字符串。 我該怎麼辦?

回答

3

您可以將函數傳遞給re.sub,它將採用匹配的模式samples = {:d}\\n(我必須更新)並以某種方式計算它。這裏是一個演示:

import re 

def sampleRounder(match): 
    return str(int(float(match.group(1)))) #base=10 

s = "this is v = 2342.2\n and another v = 231.003\n and some stuff..." 

print(re.sub("v = ([0-9]*\.[0-9]+|[0-9]+)\\n", sampleRounder, s)) 
+0

完美!謝謝你,很好的答案,易於重用:) – sashkello

+0

這個截斷而不是四捨五入到最接近的整數,但只要OP可以找出如何自己做到這一點(提示:'圓內部做它說什麼,嘗試「幫助(圓)」更多),這應該是他所需要的。 – abarnert

+0

我重讀了OP的問題,我可以看到我的示例代碼遠離請求。當我回到桌面瀏覽器時我會修復它,但這個想法仍然存在:) –