2015-01-17 2 views
1

일치하는 문자열을 큰 문자열로 대체하는 기본 동작은 일치하는 문자열 ie의 시작 위치에서 대체를 시작하는 것입니다. re.sub를 사용하여 다양한 크기의 십진수를 대체 할 때 십진수를 줄 때

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

[파이썬에서 10 진 정렬 서식] 가능한 복제본 (http://stackoverflow.com/questions/1025379/decimal-alignment-formatting-in-python) – Andy

+0

모든 공백을 무시할 때 가능하지 않다고 생각합니다. '0.12345'까지 누른 다음 그것을 교체하십시오. 공백과 일치하는 경우에는 기회가있을 수 있습니다 –

+0

정렬을 사용하여 분할하고 다시 가입 할 수 있습니다. –

답변

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' 
을 일하고 : 문자열이 문자열이 정확히 알고 얼마나 문자열 교체가 일단은 담당자에 비교입니다
2

당신은 ljust 또는 rjust 등을 결정하는 논리를 더 추가해야합니다. 그러나 이것은 시작해야합니다. 교체 할 정규식 외부 '{:.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 
또 다른 방법은 것입니다 문자열의 시작과 끝 인덱스를 받고있다

로 그 길이를 사용하여 지불 할 수 있음, 꽤 쉽게를 조정한다

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 
+0

심지어 '100.12300'을 가졌습니까 ?? 하지만 OP는'100.12000'을 얻었습니다. OP쪽에 오타가 있습니까? –

+0

@BhargavRao, yep 틀림없이 오타 –

+0

(내 의견을 도난했습니다.) * 죄송합니다. * –

관련 문제