我正在寻找一种方法,从字符串中的所有浮点数中删除所有无用的零。
所以我将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/

10-12 20:17