Python:从字符串中的浮点数中删除0

时间:2015-06-26 15:55:46

标签: python string floating-point

我正在寻找一种方法,从字符串中的所有浮点数中删除所有无用的零。 所以我将set.default.LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 set.default.FAKETIME_TIMESTAMP_FILE=/home/Documents/faketime.txt 转为1.0*2.40*abc+1。 我现在有两种方法可以解决另一个问题:

1*2.4*abc+1

如果您不知道,我在说什么,请随时提出。

5 个答案:

答案 0 :(得分:2)

您可以使用函数作为替换来执行正则表达式替换:

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

答案 1 :(得分:1)

你正在使用一个后视模式(`(?&lt; = ...)构造)。那不会在这里工作。你需要做的是寻找&#34;微不足道的&#34;零。 100中的两个零.100.0100中的最后两个零并不重要。有些事需要注意:

  • 100 - &gt; 100个
    这必须保持不变(当然必须&#39; 0&#39;)。

  • 100.0000 - &gt; 100个
    这里想要删除尾随零和小数点。

  • 100.0100 - &gt; 100.01 这里想要保留小数点和所有小数位,直到&#39; 1&#39;。

  • .1000 - &gt; 0.1
    这里小数点前没有前导数字。


一个(不完全)简单的正则表达式将起到作用:

language


演示:https://ideone.com/9MVIlC

答案 2 :(得分:1)

字符串来自哪里?也许最好从一开始就以你想要的格式生成它,而不是之后尝试解析它。例如......而不是一个完整的解决方案,因为我不知道你将拥有的可能的值范围。查看Python网站上Python的Mini Formatting Language,了解您的python版本。格式部分中的数字等显然可以用变量

替换
>>> "{:3.0f}*{:3.1f}*{}+{:<3.0F}".format(1.000,2.40000,"abc",1e0)
'  1*2.4*abc+1  

答案 3 :(得分:0)

这是(IMO)最简单的方法,避免复杂的正则表达式。假设所有表达式都由+, - ,*或/.

分隔
def strip(s):
    if s.find('.') != -1:
        s= s.rstrip('0')
        if s[-1] == '.': s = s[:-1]
        return s
    else:
        return s

s = raw_input() + '+'
accum = ''
out = ''
for i in range(len(s)):
    if s[i] in "+-/*":
        out = out + strip(accum) + s[i] 
        accum = ''
    else:
        accum = accum + s[i]
print out[:-1]

答案 4 :(得分:-2)

好吧,如果您不想使用re库,您可以直接执行此操作。这是一个老技巧。

string = <your_string_with_zeroes>
string_new = []
for i in list(string):
    if i!='0':
        string_new.append(i)

print(''.join(string_new))