我正在寻找一种方法,从字符串中的所有浮点数中删除所有无用的零。
所以我将1.0*2.40*abc+1
转到1*2.4*abc+1
。
我现在有两种方法可以解决此问题,一种可以解决另一个问题:
re.sub(r'(?<=\d)\.?0+\b', "", my_string)
#Problem: It shorts 10 to 1 (for example)
re.sub(r'(?<=\d)\.0+\b', "", my_string)
#Problem: It doesn't short 2.40 (for example)
如果您不知道我在说什么,请随时提问。
最佳答案
您可以使用函数作为替换来执行正则表达式替换:
repl=lambda x: x.group(1) + (x.group(2).rstrip('0').rstrip('.'))
re.sub('(?<!\d)(\d+)(\.\d*)(?!\d)',repl,string)
当然,它比复杂得多的RE更容易。现在,先行是可选的,但它们不会更改您得到的匹配项。
>>> for testcase in ('1','1.','1.0','1.01','1.01000','0.00','0.100','1.0*2.40*abc+1','100.000','100.0100','20.020','200.'):
... print('{:16s} --> {}'.format(testcase, re.sub('(?<!\d)(\d+)(\.\d*)(?!\d)',repl,testcase)))
...
1 --> 1
1. --> 1
1.0 --> 1
1.01 --> 1.01
1.01000 --> 1.01
0.00 --> 0
0.100 --> 0.1
1.0*2.40*abc+1 --> 1*2.4*abc+1
100.000 --> 100
100.0100 --> 100.01
20.020 --> 20.02
200. --> 200
关于python - Python:从字串中的浮点数移除0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31077475/