在我看来,用更大的字符串替换匹配字符串的默认行为是在匹配字符串的起始位置开始替换,即。
import re
string = "Parameter Value: 0.12345"
new = re.sub(r'(\d|\.)+', '%0.5f' % 100.123, string)
print string+'\n'+new
给出输出:
Parameter Value: 0.12345
Parameter Value: 100.12300
这似乎是默认行为,但是有办法获得:
Parameter Value: 0.12345
Parameter Value: 100.12300
相反,小数位与排列前的位置对齐?
答案 0 :(得分:2)
你必须添加更多逻辑来决定是否要调整或调整等等。但这应该让你开始。可能需要付费才能将'{:.5f}'.format(100.123)
移到正则表达式之外并使用其长度作为决定因素
import re
s = "Parameter Value: 0.12345"
new = re.sub(r'(\d|\.)+', '{:.5f}'.format(100.123), s)
s = s.split(" ")
new = new.split(" ")
a, b = s[-1], new[-1]
ln = len(max(a, b, key=len))
print("{}{:>{ln}}\n{}{}".format(" ".join(s[:-1]), a, " ".join(new[:-1]), b, ln=ln)))
Parameter Value: 0.12345
Parameter Value: 100.12300
另一种方法是获取要替换的字符串的开始和结束索引,一旦确切知道字符串的位置以及要替换的字符串与rep相比多长时间,就很容易调整字符串:
import re
f = 100.123
rep = '{:.5f}'.format(f)
s = "Parameter Value: 0.12345"
inds = next(re.finditer(r'(\d|\.)+', s))
start, end = inds.span()
print(start,end)
(21, 28)
ln = end - start
答案 1 :(得分:1)
从Padraic的comment中获取线索我试过这个并且它正在工作
>>> string = "Parameter Value: 0.12345"
>>> s = string.split(":")
>>> num = 100.123
>>> ":".join([s[0],("%0.5f"%(num)).rjust(len(s[1]))])
'Parameter Value: 100.12300'
>>> string
'Parameter Value: 0.12345'