簡體   English   中英

Python:從字串中的浮點數移除0

[英]Python: Remove 0s from floats in string

我正在尋找一種方法,從字符串中的所有浮點數中刪除所有無用的零。 所以我將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

您正在使用后向模式(`(?<= ...)構造)。 那在這里行不通。 您需要做的是尋找“無關緊要的”零。 100中的兩個零。100.0100中的最后兩個零並不重要。 需要注意的一些事項:

  • 100-> 100
    這必須保持不變(當然必須為“ 0”)。

  • 100.0000-> 100
    這里要刪除尾隨零和小數點。

  • 100.0100-> 100.01這里要保留小數點和所有小數位直到'1'。

  • .1000-> .1
    此處小數點前沒有前導數字。


一個(不太完全)簡單的正則表達式可以解決這個問題:

re.sub('(\d\.|\.\d*[1-9])0+(?!\d)',r'\1',string)


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

弦從哪里來? 也許最好從一開始就以所需的格式生成它,而不是嘗試在以后解析它。 例如...不是一個完整的解決方案,因為我不知道您可能擁有的值的范圍。 在Python網站上查看Python的迷你格式語言,了解您所使用的python版本。 格式部分中的數字等顯然可以用變量替換

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

這是(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]

好吧,如果您不想使用re庫,則只需執行此操作即可。 這是一個老把戲。

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

print(''.join(string_new))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM