Strings sind in Python un­ver­än­der­lich. Trotzdem kannst du Zeichen entfernen, indem du mithilfe passender Methoden einen neuen String ge­ne­rierst, der lediglich die ge­wünsch­ten Aus­schnit­te des Originals be­inhal­tet.

Un­ver­än­der­lich­keit von Strings einfach erklärt

Un­ver­än­der­lich­keit (Im­mu­ta­bi­li­ty) bedeutet, dass ein Objekt nach seiner Er­stel­lung nicht mehr mo­di­fi­ziert werden kann. In Python gilt dies für jeden String. Wenn du Zeichen aus einer Zei­chen­ket­te entfernst, erzeugst du im Hin­ter­grund tat­säch­lich ein neues Objekt mit den gewählten Elementen. Der ur­sprüng­li­che String bleibt dabei un­an­ge­tas­tet. Diese Ei­gen­schaft sorgt für eine ef­fi­zi­en­te Spei­cher­nut­zung und beugt un­er­war­te­ten Fehlern bei der Arbeit mit Texten vor.

Bestimmte Zeichen gezielt entfernen

Möchtest du spe­zi­fi­sche Zeichen löschen, kannst du bei­spiels­wei­se str.replace() nutzen oder re.sub() mit einem regulären Ausdruck kom­bi­nie­ren, der die ent­spre­chen­den Muster definiert.

str.replace()

Die Funktion str.replace() dient dazu, Text­pas­sa­gen zu löschen oder durch einen anderen Teil­string zu ersetzen.

original_string = "Hello, Python#"
modified_string = original_string.replace('#', '!')
print(original_string)  # Output: Hello, Python#
print(modified_string)  # Output: Hello, Python!
Python

Im obigen Beispiel tauscht die replace()-Methode alle Rauten-Symbole („#“) in original_string gegen ein Aus­ru­fe­zei­chen („!“) aus.

re.sub()

Die Funktion re.sub() stammt aus dem re-Modul. Damit lassen sich reguläre Ausdrücke innerhalb von Zei­chen­ket­ten suchen und trans­for­mie­ren.

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!
Python

Das Muster [@#$%^&*] ist ein regulärer Ausdruck für die Son­der­zei­chen @, #, $, %, ^, &,*. Die re.sub()-Funktion iden­ti­fi­ziert sämtliche Treffer im Aus­gangs­text original_string und ersetzt sie durch einen leeren String ''. Das Resultat wird in der Variable modified_string gesichert und aus­ge­ge­ben.

Alle Zeichen außer Buch­sta­ben filtern

Um alles außer Buch­sta­ben 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: HelloWorld
Python

Der 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 Leer­zei­chen ver­schwin­den.

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: HelloWorld
Python

Hier nutzen wir List Com­pre­hen­si­on, um durch jedes Zeichen in original_string zu gehen. Mit isalpha() prüfen wir auf Buch­sta­ben. 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: HelloWorld
Python

str.isalpha() liefert True, wenn es sich um einen Buch­sta­ben 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-Buch­sta­ben.

Nur Zahlen im String behalten

Zahlen lassen sich analog zu den vorigen Methoden mittels re.sub(), filter() oder der Funktion isdecimal() ex­tra­hie­ren.

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: 123
Python

Mit 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: 123
Python

Die Kom­bi­na­ti­on aus filter() und isdecimal() isoliert Zahlen aus dem Text. Der re­sul­tie­ren­de String prä­sen­tiert dir schließ­lich nur noch die Zif­fern­fol­ge 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******
Python

Al­ter­na­tiv nutzen wir isdecimal() innerhalb einer List Com­pre­hen­si­on. 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.

Ef­fi­zi­en­te Be­ar­bei­tung mit translate()

Die Methode translate() ist ein mächtiges Python-Werkzeug für komplexe Er­set­zun­gen. Sie er­mög­licht es, Zei­chen­ket­ten hoch­ef­fi­zi­ent auf Basis einer Über­set­zungs­ta­bel­le um­zu­wan­deln.

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.
Python

Wir verwenden str.maketrans() und dict.fromkeys(), um eine Trans­la­ti­on Table zu de­fi­nie­ren. Darin legen wir fest, dass Vokale durch * ersetzt werden. Diese Tabelle wenden wir auf den String an, um das Ergebnis modified_string zu erhalten.

Zum Hauptmenü