HOWTO · Python
Bestimmte Zeichen aus Zeichenkette in Python entfernen
Dieses Tutorial demonstriert, wie man in Python bestimmte Zeichen aus einer Zeichenkette entfernen kann
Auf dieser Seite
Verwende str.replace(), um eine bekannte Teilzeichenkette zu entfernen, str.translate(), um mehrere einzelne Zeichen zu löschen, eine Comprehension, um Zeichen beizubehalten, die eine Bedingung erfüllen, oder re.sub(), wenn die zu entfernenden Zeichen durch ein Muster beschrieben werden. Jeder Ansatz gibt eine neue Zeichenkette zurück: Python Zeichenketten sind unveränderlich, daher bleibt der ursprüngliche Wert erhalten. Alle vier Beispiele unten wurden erfolgreich ausgeführt und gaben jeweils Hello World aus.
Ausgewählte Zeichen mit str.replace() entfernen
str.replace(old, new) ersetzt Vorkommen einer Teilzeichenkette durch eine andere. Verwende "" als Ersatz, um sie zu entfernen. Das ist übersichtlich, wenn nur wenige bekannte Ziele vorkommen; eine kleine Anzahl lässt sich mit wiederholten Aufrufen behandeln.
Dieses Beispiel entfernt zwei bekannte Teilzeichenketten aus einer Begrüßung:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
source = "Hello, World!"
cleaned = source.replace(",", "").replace("!", "")
print(cleaned)
Die Aufrufe entfernen Kommas und Ausrufezeichen an allen Stellen, an denen sie vorkommen. Sie ändern source nicht. Weise den zurückgegebenen Wert einer Variablen zu, wenn der bereinigte Text im weiteren Code verwendet werden soll. replace() entfernt auch längere bekannte Teilzeichenketten. Verwende es also, wenn das Ziel ein Wort oder eine Zeichenfolge ist und nicht nur ein einzelnes Zeichen. Bei einer längeren Liste einzelner Zeichen ist eine Übersetzungstabelle oder ein Filter leichter zu pflegen.
Mehrere Zeichen mit str.translate() entfernen
Verwende str.maketrans() mit seinem dritten Argument, um eine Löschungstabelle für eine Gruppe einzelner Zeichen zu erstellen. Übergib die Tabelle anschließend an str.translate(). Jedes zur Löschung aufgeführte Zeichen wird überall entfernt, wo es vorkommt. Beliebige mehrstellige Teilzeichenketten werden damit nicht gefunden.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
source = "Hello, World!"
remove_chars = ",!"
table = str.maketrans("", "", remove_chars)
cleaned = source.translate(table)
print(cleaned)
Ändere remove_chars, um festzulegen, welche Zeichen verschwinden. Das eignet sich, wenn die Regel eine feste Zeichengruppe umfasst. str.maketrans() kann auch Zeichenersetzungen beschreiben, aber mit dem dritten Argument werden Zeichen ausdrücklich zur Löschung markiert. Wenn die Regel auf einer Bedingung beruht, verwende stattdessen einen Filter.
Zeichen filtern und das Ergebnis zusammenfügen
Eine Comprehension macht die Beibehaltungsregel sichtbar: Durchlaufe die Eingabe und behalte ein Zeichen nur dann, wenn es nicht in der zu entfernenden Zeichengruppe enthalten ist. Rufe anschließend str.join() auf der Trennzeichen-Zeichenkette auf, um die beibehaltenen Zeichen zusammenzufügen. Das hier gezeigte leere Trennzeichen reiht sie ohne zusätzlichen Text aneinander.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
source = "Hello, World!"
remove_chars = set(",!")
cleaned = "".join(char for char in source if char not in remove_chars)
print(cleaned)
Verwende eine Bedingung, die ausdrückt, was erhalten bleiben soll, zum Beispiel mit char.isdigit(), um nur Ziffern zu behalten. Die Bedingung wird für jedes Zeichen ausgewertet und kann daher flexiblere Regeln als eine feste Löschungstabelle abbilden. Das Trennzeichen bestimmt das Ergebnis: " ".join(...) fügt zwischen den erhaltenen Elementen Leerzeichen ein, während "".join(...) die Zeichen direkt aneinanderreiht. join() fügt ein Iterable zusammen; die Methode filtert es nicht selbst.
Zeichen entfernen, die einem Muster mit re.sub() entsprechen
re.sub(pattern, replacement, text) ersetzt jeden Treffer eines regulären Ausdrucksmusters. Eine Zeichenklasse listet Alternativen auf, sodass jeweils ein einzelnes Zeichen gefunden wird; ein leerer Ersatz entfernt jeden Treffer. Verwende für Muster einen Raw-String, wenn sich damit Backslashes leichter lesen lassen.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import re
source = "Hello, World!"
cleaned = re.sub(r"[,!]", "", source)
print(cleaned)
Die Zeichenklasse [,!] findet ein Komma oder ein Ausrufezeichen. Um einen Bereich oder eine Kategorie von Zeichen zu entfernen, beschreibst du die Regel im Muster. Lies solche Muster sorgfältig und teste sie, denn Satzzeichen können in regulären Ausdrücken eine besondere Bedeutung haben. Maskiere ein Zeichen, wenn es wörtlich gefunden werden soll, aber im regulären Ausdruck eine Funktion hat. Für eine kleine feste Gruppe ist str.translate() oft leichter lesbar. Wähle re.sub(), wenn es auf Mustererkennung ankommt.
Einen Ansatz auswählen und seine Grenzen verstehen
Wähle den Ansatz danach aus, wie der unerwünschte Text beschrieben ist:
- Verwende
str.replace()für eine bekannte Teilzeichenkette oder wenige konkrete Ersetzungen. - Verwende
str.translate(), um eine feste Gruppe einzelner Zeichen zu löschen. - Verwende eine Comprehension und
str.join(), wenn die Regel eine Bedingung für jedes Zeichen ist. - Verwende
re.sub(), wenn ein regulärer Ausdruck beschreibt, was entfernt werden soll.
Diese Operationen entfernen genau das, was ihre Argumente auswählen. Sie entfernen nicht automatisch umgebende Leerzeichen, normalisieren Unicode oder behandeln Groß- und Kleinbuchstaben als gleichwertig. Soll die Entfernung unabhängig von der Groß- und Kleinschreibung sein, lege fest, welche Varianten gefunden werden sollen, oder wende eine entsprechende Suchregel an. Bedenke dabei, dass die Umwandlung des Ausgangstexts in Klein- oder Großbuchstaben den Text selbst verändert. Wandle ihn nicht allein zum Entfernen von Zeichen um, es sei denn, diese Änderung ist gewünscht. Die Beispiele veranschaulichen die Funktionsweise der Methoden; für die Auswahl ist keine pauschale Aussage zur Geschwindigkeit nötig. Verwende die klarste Regel für die zu bereinigenden Daten und miss bei Bedarf mit repräsentativen Eingaben die Leistung.