Zeichen aus einem String in Python entfernen

Um Zeichen aus einem String in Python zu entfernen, muss ein neuer String erzeugt werden, da sich str-Objekte nach ihrer Erstellung nicht mehr verändern lassen. Für einzelne Zeichen oder Teilstrings eignet sich str.replace(). Sollen mehrere Zeichen in einem Durchgang gelöscht werden, können str.translate() oder str.maketrans() verwendet werden. re.sub() eignet sich für musterbasierte Regeln, während Slicing sinnvoll ist, wenn Zeichen am Anfang, am Ende oder an einem bestimmten Index entfernt werden sollen.

Dieses Tutorial zeigt die verschiedenen Methoden anhand ausführbarer Beispiele in der interaktiven Python-Konsole. Wenn ausschließlich Leerzeichen entfernt werden sollen, bietet sich eine Anleitung zum Entfernen von Leerzeichen aus Python-Strings an.

Python-Anwendungen lassen sich direkt aus GitHub über eine verwaltete Anwendungsplattform bereitstellen, während die Plattform die Skalierung der Anwendung übernimmt.

Die wichtigsten Erkenntnisse

  • Python-Strings sind unveränderlich: Beim Entfernen von Zeichen entsteht immer ein neuer String, während der ursprüngliche String unverändert bleibt.
  • Für ein einzelnes Zeichen oder einen Teilstring kann replace(old, '') verwendet werden. Mit einem dritten Argument lässt sich festlegen, wie viele Ersetzungen maximal durchgeführt werden.
  • Mit translate() in Kombination mit str.maketrans('', '', chars) oder einem Mapping-Dictionary können mehrere Zeichen in nur einem Durchlauf entfernt werden.
  • re.sub() eignet sich besonders dann, wenn die Entfernung auf einem Muster basiert, beispielsweise bei Ziffern, Satzzeichen oder Nicht-ASCII-Zeichen.
  • Mit Slicing, etwa über s[1:], s[:-1] oder s[:i] + s[i+1:], lassen sich das erste, letzte oder ein über einen Index bestimmtes Zeichen entfernen, ohne den gesamten String nach einem bestimmten Zeichen durchsuchen zu müssen.
  • strip(), lstrip() und rstrip() entfernen Zeichen am Anfang oder Ende eines Strings, häufig Leerzeichen. Beliebige Zeichen innerhalb des Strings werden damit nicht gelöscht.
  • Listen besitzen die Methode remove(), Strings hingegen nicht. Wird remove() auf einem String aufgerufen, entsteht ein AttributeError.

Die passende Methode zum Entfernen von Zeichen auswählen

Methode Geeignet für Einschränkung
replace() Ein einzelnes Zeichen oder einen Teilstring mit einfachen literalen Werten entfernen Für mehrere unterschiedliche Zeichen sind verkettete Aufrufe oder eine Schleife erforderlich
translate() / maketrans() Viele verschiedene Zeichen gleichzeitig entfernen Bei komplexeren Regeln kann die Lesbarkeit abnehmen
re.sub() Ziffern, Gruppen von Satzzeichen oder durch reguläre Ausdrücke definierte Werte entfernen Bei einem einzelnen literalen Wert normalerweise langsamer als replace()
Slicing Das erste, letzte oder ein positionsabhängiges Zeichen entfernen Nicht geeignet, um jedes Vorkommen eines Zeichens innerhalb eines Strings zu löschen
strip() / lstrip() / rstrip() Unerwünschte Zeichen am Anfang oder Ende entfernen, beispielsweise Leerzeichen oder \n Zeichen in der Mitte des Strings bleiben unverändert

Zeichen mit replace() entfernen

str.replace() erzeugt eine Kopie eines Strings, in der jedes Vorkommen des ersten Arguments durch das zweite Argument ersetzt wird. Wird als Ersatz ein leerer String angegeben, werden die passenden Zeichen oder Teilstrings gelöscht.

Zunächst wird ein Beispiel-String definiert:

Alle Vorkommen von a entfernen:

Ausgabe:

Beide a-Zeichen wurden entfernt. Der ursprüngliche Wert von s bleibt jedoch weiterhin 'abc12321cba'.

Zeilenumbrüche entfernen

s = 'ab\ncd\nef'
print(s.replace('\n', ''))

Ausgabe:

Einen Teilstring entfernen

print('Helloabc'.replace('Hello', ''))

Ausgabe:

Anzahl der Ersetzungen begrenzen

Mit dem optionalen dritten Argument lässt sich die maximale Anzahl der Ersetzungen festlegen:

print('abababab'.replace('a', 'A', 2))

Ausgabe:

Nur die ersten beiden a-Zeichen werden verändert. Weitere Einzelheiten bietet eine ausführliche Einführung zu Python String replace().

Zeichen mit translate() entfernen

str.translate() verarbeitet jedes Zeichen mithilfe einer Übersetzungstabelle. Zeichen, die entfernt werden sollen, können auf None abgebildet werden. Alternativ lässt sich str.maketrans mit einer Menge zu löschender Zeichen einsetzen.

Alle Vorkommen von b entfernen:

s = 'abc12321cba'
print(s.translate({ord('b'): None}))

Ausgabe:

Mehrere Zeichen mit einem einzigen Aufruf entfernen:

print(s.translate({ord(i): None for i in 'abc'}))

Ausgabe:

Auf dieselbe Weise lassen sich auch Zeilenumbrüche entfernen:

print('ab\ncd\nef'.translate({ord('\n'): None}))

Ausgabe:

str.maketrans('', '', ',!') erstellt eine Übersetzungstabelle, die ausschließlich zum Löschen bestimmter Zeichen dient und häufig leichter zu lesen ist als eine Dictionary-Comprehension:

string = "Hello, World!"
print(string.translate(str.maketrans("", "", ",!")))
# Hello World

Zeichen mit regulären Ausdrücken entfernen

re.sub() ist sinnvoll, wenn die Regel zum Entfernen von Zeichen auf einem Muster und nicht auf einem festen literalen Wert beruht. Vor der Verwendung muss zunächst re importiert werden.

Ziffern entfernen:

import re

text = "Hello123 World456"
print(re.sub(r'\d+', '', text))
# Hello World

Nicht-alphanumerische Zeichen entfernen:

print(re.sub(r'[^a-zA-Z0-9]', '', "Hello, World! 123"))
# HelloWorld123

Nicht-ASCII-Zeichen entfernen:

raw = 'Café résumé'
print(re.sub(r'[^\x00-\x7F]+', '', raw))
# Caf rsum

Eine ausführlichere Einführung in die Mustersyntax bieten Anleitungen zu regulären Ausdrücken in Python.

Zeichen mit Slicing und Comprehensions entfernen

Slicing entfernt Zeichen anhand ihrer Position, ohne den gesamten String nach einem bestimmten Wert durchsuchen zu müssen.

s = "Hello, World!"
print(s[1:])    # ello, World!  — remove first character
print(s[:-1])   # Hello, World  — remove last character

i = 4
print(s[:i] + s[i+1:])  # Hell, World! — remove character at index i

Eine List Comprehension oder ein Generator innerhalb von join kann verwendet werden, um einzelne Zeichen zu filtern:

vowels = 'aeiouAEIOU'
print(''.join(c for c in 'hello world' if c not in vowels))
# hll wrld

Performance bei großen Strings

Bei einem lokalen Test mit Python 3.12 und einem String mit einer Million Zeichen ergaben sich ungefähr folgende Resultate:

Aufgabe Schnellster Ansatz
Ein häufig wiederkehrendes Zeichen entfernen replace()
Mehrere unterschiedliche Zeichen entfernen translate() oder ein einzelnes re.sub('[abc]', '')
Musterbasierte Bereinigung re.sub()

Mehrere hintereinander ausgeführte replace()-Aufrufe verursachen bei sehr großen Strings mehr Aufwand als ein einzelner Aufruf von translate() oder ein einzelner regulärer Ausdruck. Bei üblichen Strings in Anwendungen sind jedoch alle genannten Methoden normalerweise schnell genug. Profiling wird vor allem dann relevant, wenn pro Anfrage mehrere Megabyte Text verarbeitet werden.

Unerwünschte Zeichen in Pandas-Spalten entfernen

In Datenverarbeitungs-Workflows können String-Methoden auf einzelne Spalten angewendet werden.

Nur Ziffern behalten lässt sich mit .str.replace() und einer Capture Group umsetzen:

import pandas as pd

df = pd.DataFrame({'strings': ['123abc', '456def', '789ghi']})
df['strings'] = df['strings'].str.extract(r'(\d+)')[0]
print(df)

Benutzerdefinierte Filterung mit .apply():

def remove_vowels(text):
    vowels = 'aeiouAEIOU'
    return ''.join(c for c in text if c not in vowels)

df = pd.DataFrame({'strings': ['hello world', 'python is fun']})
df['strings'] = df['strings'].apply(remove_vowels)

Häufig gestellte Fragen

1. Wie entfernt man ein Zeichen aus einem String in Python?

Verwenden Sie replace() mit einem leeren String als Ersatzwert:

text = "Hello, World!"
print(text.replace(",", ""))
# Hello World!

Sollen mehrere unterschiedliche Zeichen gelöscht werden, sind translate() oder re.sub() meist besser geeignet, als zahlreiche replace()-Aufrufe miteinander zu verketten.

2. Gibt es eine remove()-Methode für Python-Strings?

Nein. Mit list.remove() lässt sich ein Element aus einer Liste löschen, Strings besitzen jedoch keine remove()-Methode. Der Aufruf "abc".remove("a") führt zu einem AttributeError. Für Strings können stattdessen replace(), translate(), re.sub() oder Slicing eingesetzt werden.

3. Wie entfernt man ein Zeichen anhand seines Index aus einem String?

Mit Slicing kann der Index ausgelassen werden, der entfernt werden soll:

s = "EXAMPLE"
i = 2  # remove 'A' at index 2
print(s[:i] + s[i+1:])
# EXMPLE

Sollen alle Vorkommen eines Zeichens unabhängig von ihrer Position entfernt werden, sollte anstelle von indexbasiertem Slicing replace() oder translate() verwendet werden.

4. Was ist strip() in Python und wann sollte es verwendet werden?

strip() entfernt Zeichen am Anfang und Ende eines Strings. Standardmäßig werden dabei Leerzeichen entfernt. Die Varianten lstrip() und rstrip() führen dieselbe Art der Bereinigung jeweils nur auf einer Seite durch. Zeichen in der Mitte eines Strings werden von diesen Methoden nicht entfernt. strip() eignet sich beispielsweise nach dem Einlesen von Zeilen aus einer Datei. Befinden sich Zeilenumbrüche dagegen an beliebigen Stellen im Text, können replace('\n', '') oder translate() verwendet werden. Dieses Verhalten lässt sich mit dem allgemeinen Trimmen von Strings in Python vergleichen.

5. Wie entfernt man mehrere Zeichen aus einem String in Python?

Option 1 — translate() in einem einzigen Durchgang:

s = "a1b2c3"
print(s.translate(str.maketrans("", "", "abc")))
# 123

Option 2 — re.sub() mit einem Muster:

import re
print(re.sub(r'[abc]', '', s))
# 123

Option 3 — Schleife mit replace() für eine kurze und leicht lesbare Liste:

for ch in "abc":
    s = s.replace(ch, "")

Bei zwei oder drei Zeichen ist eine Schleife gut geeignet. Für größere Mengen zu löschender Zeichen sind translate() oder ein regulärer Ausdruck bei großen Eingaben meist übersichtlicher und schneller.

Fazit

Zeichen lassen sich aus Python-Strings mit replace() für literale Werte, mit translate() für mehrere Zeichen, mit re.sub() für Muster und mit Slicing für positionsbasierte Änderungen entfernen. Entscheidend ist, die Methode passend zur jeweiligen Regel auszuwählen. Da Strings unveränderlich sind, entsteht dabei immer ein neuer Wert, der anschließend an den aufrufenden Code zurückgegeben werden kann.

Als weitere Themen bieten sich Python-String-Funktionen, die Umwandlung eines Strings in eine Liste und das Entfernen von Leerzeichen aus Strings an.

Python-Anwendungen können aus GitHub über eine verwaltete Anwendungsplattform bereitgestellt werden. Wenn ein Projekt verwaltete Inferenz benötigt, lässt sich die Entwicklung zusätzlich auf einer verwalteten Plattform für generative KI fortsetzen.

Für weitere Projekte stehen außerdem allgemeine Lösungen für Computing, Speicher, Netzwerke und verwaltete Datenbanken zur Verfügung.

Quelle: digitalocean.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren: