Wie entfernt man die Nullen nach rechen Operatoren und vor Zahlen in einem Python String?

2 Antworten

Für sowas würde ich mit regulären Ausdrücken arbeiten:

Code-Beispiel für deine Situation:

import re
old_string = "07+605"
new_string = re.sub('0*([1-9][0-9]*|0)', r'\1', old_string)

print(new_string) #Output: "7+605"

Bzw. damit es gegebenenfalls bei Nachkommastellen hinter einem Dezimalpunkt, wie beispielsweise bei 00690.0130 nicht zu Problemen kommt, dass das zu 690.130 statt zu 690.0130 umgewandelt werden würde...

import re
old_string = "07+605-00690.0130"
new_string = re.sub('0*([1-9][0-9]*|0\.?[0-9]*)', r'\1', old_string)

print(new_string) #Output: "7+605-690.0130"

Mir ist keine einfache Möglichkeit bekannt wie man das in Python machen kann. Für ein paar Sonderfälle gibt es sicherlich schon fertige Funktionen, aber für dich vermutlich nicht passend.

Hier wäre mein Lösungsvorschlag:

string = "0007+0605*0+30"


def process_string(s):
    # function to get structure of string
    def get_struc(s):
        struc = "n" # add 'n' to later detect leading zeros
        for i in range(len(s)):
            if s[i] in ['1', '2', '3', '4', '5', '6', '7', '8', '9']:
                struc += 'i'
            elif s[i] in ['0']:
                struc += '0'
            else:
                struc += 'n'
        return struc + 'n' # add 'n' to later detect single zeros
    
    # function to remove specific character in string
    def remove_at(s, i):
        return s[:i] + s[i+1:]
    
    # save string for output
    s_out = s
    finished = False
    while (not finished):
        structure = get_struc(s_out)
        # if pattern "n0i" or "n00" -> leading zero
        # string.find returns -1 if not found
        ind1 = structure.find("n00")
        ind2 = structure.find("n0i")
        if (ind1 >= 0):
            s_out = remove_at(s_out, ind1)
        elif (ind2 >= 0):
            s_out = remove_at(s_out, ind2)
        else:
            finished = True
    return s_out
    
print("'" + string + "' --> '" + process_string(string) + "'")

Als erstes wird die Struktur des Strings erkannt. Danach wird nach Fehlern in der Struktur gesucht (also vorangestellt '0' bei Zahlen) und diese dann gelöscht. Es ist gefühlt etwas umständlich, weil immer nur ein Fehler nacheinander gefunden wird. Man könnt es noch dahingehend optimieren mehrere Fehler gleichzeitig zu finden.

Ich denke aber so ist es ersichtlicher was genau der Code macht und kann auch einfach angepasst werden.