Wie entfernt man die Nullen nach rechen Operatoren und vor Zahlen in einem Python String?
Hallo, ich hätte eine kurze Python frage. Und zwar habe ich einen String.
String = "07+605"
Dieser String ist mir nicht bekannt, es sind nämlich Nutzerangaben. Nun möchte ich die Nullen vor den Zahlen entfernen.
String = "7+605"
Ich kann diese Zeile nicht einfach schreiben, da der String mir wie gesagt nicht bekannt ist...
Weiß jemand eine Methode, wie ich diese Nullen rausholen kann?
Liebe Grüße Alex950
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.