regex help
Tim Chase
python.list at tim.thechases.com
Fri Mar 13 13:38:38 EDT 2015
On 2015-03-13 12:05, Larry Martell wrote:
> I need to remove all trailing zeros to the right of the decimal
> point, but leave one zero if it's whole number.
>
> But I can't figure out how to get the 5.0000000000000000 to be 5.0.
> I've been messing with the negative lookbehind, but I haven't found
> one that works for this.
You can do it with string-ops, or you can resort to regexp.
Personally, I like the clarity of the string-ops version, but use
what suits you.
-tkc
import re
input = [
'14S',
'5.0000000000000000',
'4.56862745000000',
'3.7272727272727271',
'3.3947368421052630',
'5.7307692307692308',
'5.7547169811320753',
'4.9423076923076925',
'5.7884615384615383',
'5.137254901960000',
]
output = [
'14S',
'5.0',
'4.56862745',
'3.7272727272727271',
'3.394736842105263',
'5.7307692307692308',
'5.7547169811320753',
'4.9423076923076925',
'5.7884615384615383',
'5.13725490196',
]
def fn1(s):
if '.' in s:
s = s.rstrip('0')
if s.endswith('.'):
s += '0'
return s
def fn2(s):
return re.sub(r'(\.\d+?)0+$', r'\1', s)
for fn in (fn1, fn2):
for i, o in zip(input, output):
v = fn(i)
print "%s: %s -> %s [%s]" % (v == o, i, v, o)
More information about the Python-list
mailing list