我正在寻找一种方法,从字符串中的所有浮点数中删除所有无用的零。
所以我将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
如果您不知道,我在说什么,请随时提出。
答案 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
答案 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))