Python: So löschst oder ersetzt du Zeichen in Strings
Strings sind in Python unveränderlich. Trotzdem kannst du Zeichen entfernen, indem du mithilfe passender Methoden einen neuen String generierst, der lediglich die gewünschten Ausschnitte des Originals beinhaltet.
Unveränderlichkeit von Strings einfach erklärt
Unveränderlichkeit (Immutability) bedeutet, dass ein Objekt nach seiner Erstellung nicht mehr modifiziert werden kann. In Python gilt dies für jeden String. Wenn du Zeichen aus einer Zeichenkette entfernst, erzeugst du im Hintergrund tatsächlich ein neues Objekt mit den gewählten Elementen. Der ursprüngliche String bleibt dabei unangetastet. Diese Eigenschaft sorgt für eine effiziente Speichernutzung und beugt unerwarteten Fehlern bei der Arbeit mit Texten vor.
Bestimmte Zeichen gezielt entfernen
Möchtest du spezifische Zeichen löschen, kannst du beispielsweise str.replace() nutzen oder re.sub() mit einem regulären Ausdruck kombinieren, der die entsprechenden Muster definiert.
str.replace()
Die Funktion str.replace() dient dazu, Textpassagen zu löschen oder durch einen anderen Teilstring zu ersetzen.
original_string = "Hello, Python#"
modified_string = original_string.replace('#', '!')
print(original_string) # Output: Hello, Python#
print(modified_string) # Output: Hello, Python!PythonIm obigen Beispiel tauscht die replace()-Methode alle Rauten-Symbole („#“) in original_string gegen ein Ausrufezeichen („!“) aus.
re.sub()
Die Funktion re.sub() stammt aus dem re-Modul. Damit lassen sich reguläre Ausdrücke innerhalb von Zeichenketten suchen und transformieren.
import re
original_string = "Hello, World! @#$%^&*"
modified_string = re.sub(r'[@#$%^&*]', '', original_string)
print(original_string) # Output: Hello, World! @#$%^&*
print(modified_string) # Output: Hello, World!PythonDas Muster [@#$%^&*] ist ein regulärer Ausdruck für die Sonderzeichen @, #, $, %, ^, &,*. Die re.sub()-Funktion identifiziert sämtliche Treffer im Ausgangstext original_string und ersetzt sie durch einen leeren String ''. Das Resultat wird in der Variable modified_string gesichert und ausgegeben.
Alle Zeichen außer Buchstaben filtern
Um alles außer Buchstaben zu entfernen, bieten sich unter anderem die Ansätze via isalpha(), filter() oder re.sub() an.
re.sub()
import re
original_string = "Hello, 123 World! @#$%^&*"
modified_string = re.sub(r'[^a-zA-Z]', '', original_string)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: HelloWorldPythonDer Ausdruck [^a-zA-Z] erkennt jedes Zeichen, das kein Buchstabe (A-Z, a-z) ist. Am Ende enthält modified_string nur noch das Alphabet aus dem Original, während auch Leerzeichen verschwinden.
isalpha()
original_string = "Hello, 123 World! @#$%^&*"
modified_string = ''.join(char for char in original_string if char.isalpha())
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: HelloWorldPythonHier nutzen wir List Comprehension, um durch jedes Zeichen in original_string zu gehen. Mit isalpha() prüfen wir auf Buchstaben. Nur diese landen im neuen String modified_string, alles andere wird verworfen.
filter()
original_string = "Hello, 123 World! @#$%^&*"
filtered_chars = filter(str.isalpha, original_string)
modified_string = ''.join(filtered_chars)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: HelloWorldPythonstr.isalpha() liefert True, wenn es sich um einen Buchstaben handelt, sonst False. Die filter()-Funktion baut ein Filter-Objekt auf, das nur Zeichen enthält, welche die Bedingung str.isalpha() erfüllen. So säuberst du original_string von allen Nicht-Buchstaben.
Nur Zahlen im String behalten
Zahlen lassen sich analog zu den vorigen Methoden mittels re.sub(), filter() oder der Funktion isdecimal() extrahieren.
re.sub()
import re
original_string = "Hello, 123 World! @#$%^&*"
modified_string = re.sub('[^0-9]', '', original_string)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: 123PythonMit 0-9 legen wir den Bereich der Ziffern 0 bis 9 fest. Das Symbol ^ negiert die Auswahl und markiert alle Zeichen, die keine Ziffern sind. Diese werden durch re.sub gelöscht.
filter()
original_string = "Hello, 123 World! @#$%^&*"
filtered_chars = filter(str.isdecimal, original_string)
modified_string = ''.join(filtered_chars)
print(original_string) # Output: Hello, 123 World! @#$%^&*
print(modified_string) # Output: 123PythonDie Kombination aus filter() und isdecimal() isoliert Zahlen aus dem Text. Der resultierende String präsentiert dir schließlich nur noch die Ziffernfolge 123.
isdecimal()
original_string = "Hello, 123 World"
modified_string = ''.join('*' if not char.isdecimal() else char for char in original_string)
print(original_string) # Output: Hello, 123 World
print(modified_string) # Output: *******123******PythonAlternativ nutzen wir isdecimal() innerhalb einer List Comprehension. Wir iterieren über char in original_string. Ist ein Zeichen keine Ziffer (not char.isdecimal()), wird es durch ein Sternchen * ersetzt, ansonsten bleibt es bestehen.
Effiziente Bearbeitung mit translate()
Die Methode translate() ist ein mächtiges Python-Werkzeug für komplexe Ersetzungen. Sie ermöglicht es, Zeichenketten hocheffizient auf Basis einer Übersetzungstabelle umzuwandeln.
original_string = "Hello, World! Remove vowels."
translation_table = str.maketrans(dict.fromkeys('aeiouAEIOU', '*'))
modified_string = original_string.translate(translation_table)
print(original_string) # Output: Hello, World! Remove vowels.
print(modified_string) # Output: H*ll*, W*rld! R*m*v* v*w*ls.PythonWir verwenden str.maketrans() und dict.fromkeys(), um eine Translation Table zu definieren. Darin legen wir fest, dass Vokale durch * ersetzt werden. Diese Tabelle wenden wir auf den String an, um das Ergebnis modified_string zu erhalten.