Python String Replace: Vollständige Anleitung zu str.replace() und mehr
Updated on
Das Ersetzen von Zeichenketten ist eine der häufigsten Operationen bei der Textverarbeitung. Sie müssen Benutzereingaben bereinigen, Datenformate normalisieren, sensible Informationen schwärzen oder Template-Strings transformieren. Pythons str.replace() bewältigt einfache Fälle in einer Zeile, stößt aber an seine Grenzen, wenn Sie Groß-/Kleinschreibung-unabhängigen Abgleich, Regex-Muster oder bedingte Ersetzungen benötigen. Das falsche Werkzeug zu wählen bedeutet entweder einfache Aufgaben unnötig zu verkomplizieren oder fragilen Code für komplexe Aufgaben zu schreiben.
Diese Anleitung behandelt jeden Ansatz zur String-Ersetzung in Python -- vom einfachen str.replace() über regex-basiertes re.sub(), zeichenweises translate() bis hin zu praktischen Mustern für reale Textverarbeitung.
str.replace(old, new, count)
Die einfachste und gebräuchlichste Methode. Ersetzt alle Vorkommen von old durch new. Ein optionaler count begrenzt die Anzahl der Ersetzungen.
text = "Hello World, Hello Python, Hello Everyone"
# Alle Vorkommen ersetzen
print(text.replace("Hello", "Hi"))
# Hi World, Hi Python, Hi Everyone
# Nur die ersten 2 Vorkommen ersetzen
print(text.replace("Hello", "Hi", 2))
# Hi World, Hi Python, Hello Everyone
# Einen Teilstring entfernen (durch leeren String ersetzen)
messy = " extra spaces here "
print(messy.replace(" ", ""))
# extraspaceshereWichtiges Verhalten
- Gibt einen neuen String zurück (Strings sind in Python unveränderlich)
- Standardmäßig Groß-/Kleinschreibung-sensitiv
- Ersetzt alle Vorkommen, es sei denn
countist angegeben - Gibt den ursprünglichen String unverändert zurück, wenn
oldnicht gefunden wird
original = "Python is great"
new = original.replace("great", "awesome")
print(original) # Python is great (unverändert)
print(new) # Python is awesomeGroß-/Kleinschreibung-unabhängiges Ersetzen
str.replace() ist immer Groß-/Kleinschreibung-sensitiv. Für Groß-/Kleinschreibung-unabhängiges Ersetzen verwenden Sie re.sub() mit dem re.IGNORECASE-Flag.
import re
text = "Python is Great, python is Fun, PYTHON is Everywhere"
# Groß-/Kleinschreibung-unabhängiges Ersetzen
result = re.sub(r'python', 'Java', text, flags=re.IGNORECASE)
print(result)
# Java is Great, Java is Fun, Java is EverywhereRegex-Ersetzung mit re.sub()
re.sub(pattern, replacement, string, count, flags) ersetzt Übereinstimmungen eines Regex-Musters.
import re
# Ziffern durch '#' ersetzen
text = "Call 555-1234 or 555-5678"
print(re.sub(r'\d', '#', text))
# Call ###-#### or ###-####
# Ganze Telefonnummern ersetzen
print(re.sub(r'\d{3}-\d{4}', '[GESCHWÄRZT]', text))
# Call [GESCHWÄRZT] or [GESCHWÄRZT]
# Mehrere Leerzeichen durch einzelnes ersetzen
messy = "too many spaces here"
print(re.sub(r'\s+', ' ', messy))
# too many spaces hereErfassungsgruppen verwenden
import re
# Vor- und Nachname tauschen
names = "Smith, John\nDoe, Jane\nBrown, Bob"
swapped = re.sub(r'(\w+), (\w+)', r'\2 \1', names)
print(swapped)
# John Smith
# Jane Doe
# Bob Brown
# Datumsformatierung hinzufügen
dates = "Meeting on 2026-02-10 and 2026-03-15"
formatted = re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', dates)
print(formatted)
# Meeting on 02/10/2026 and 03/15/2026Eine Funktion für dynamische Ersetzung verwenden
Übergeben Sie eine Funktion anstelle eines Strings für bedingte Ersetzungen:
import re
def censor_word(match):
word = match.group()
return word[0] + '*' * (len(word) - 1)
text = "The password is secret and the code is hidden"
censored = re.sub(r'secret|hidden', censor_word, text)
print(censored)
# The password is s***** and the code is h*****import re
# Nur bestimmte Wörter in Titelschreibung umwandeln
def smart_capitalize(match):
word = match.group()
minor_words = {'a', 'an', 'the', 'and', 'or', 'but', 'in', 'on', 'at', 'to'}
if word.lower() in minor_words:
return word.lower()
return word.capitalize()
title = "the quick BROWN fox AND the lazy DOG"
result = re.sub(r'\b\w+\b', smart_capitalize, title)
print(result)
# the Quick Brown Fox and the Lazy DogMehrfache Ersetzungen
replace()-Aufrufe verketten
text = "Hello World! How are you?"
result = text.replace("Hello", "Hi").replace("World", "Earth").replace("you", "they")
print(result) # Hi Earth! How are they?Wörterbuch-basiertes Ersetzen
Für viele Ersetzungen verwenden Sie ein Wörterbuch mit re.sub():
import re
def multi_replace(text, replacements):
"""Mehrere Teilstrings mit einem Wörterbuch ersetzen."""
pattern = re.compile('|'.join(re.escape(k) for k in replacements))
return pattern.sub(lambda m: replacements[m.group()], text)
text = "The cat sat on the mat with another cat"
replacements = {
'cat': 'dog',
'mat': 'rug',
'sat': 'stood',
}
print(multi_replace(text, replacements))
# The dog stood on the rug with another dogZeichenweises Ersetzen mit translate()
Zum Ersetzen einzelner Zeichen ist str.translate() mit str.maketrans() die schnellste Option:
# Zeichen ersetzen: a->@, e->3, o->0
table = str.maketrans('aeo', '@30')
text = "Hello World"
print(text.translate(table))
# H3ll0 W0rld
# Bestimmte Zeichen entfernen
remove_vowels = str.maketrans('', '', 'aeiouAEIOU')
print("Hello World".translate(remove_vowels))
# Hll Wrld
# In einem Aufruf ersetzen UND entfernen
table = str.maketrans({'a': '@', 'e': '3', ' ': None})
print("apple pie".translate(table))
# @ppl3pi3Methodenvergleich
| Methode | Am besten für | Regex | Geschwindigkeit | Flexibilität |
|---|---|---|---|---|
str.replace() | Einfache, literale Ersetzungen | Nein | Am schnellsten | Niedrig |
re.sub() | Musterabgleich, komplexe Regeln | Ja | Mittel | Am höchsten |
str.translate() | Einzelne Zeichenzuordnung | Nein | Sehr schnell | Niedrig |
Verkettetes .replace() | Wenige literale Ersetzungen | Nein | Schnell | Niedrig |
Dict + re.sub() | Viele gleichzeitige Ersetzungen | Ja | Mittel | Hoch |
Praktische Beispiele
Text bereinigen und normalisieren
import re
def clean_text(text):
"""Text für die Verarbeitung normalisieren."""
text = text.strip()
text = re.sub(r'\s+', ' ', text) # Leerzeichen zusammenfassen
text = re.sub(r'[^\w\s.,!?-]', '', text) # Sonderzeichen entfernen
text = text.lower()
return text
raw = " Hello!!! This is MESSY @#$ text... "
print(clean_text(raw))
# hello!!! this is messy text...Template-String-Ersetzung
template = "Dear {name}, your order #{order_id} ships on {date}."
data = {
'name': 'Alice',
'order_id': '12345',
'date': 'Feb 15, 2026',
}
# str.format_map verwenden (besser als manuelles Ersetzen)
result = template.format_map(data)
print(result)
# Dear Alice, your order #12345 ships on Feb 15, 2026.Sensible Daten schwärzen
import re
def redact_pii(text):
"""E-Mails, Telefonnummern und SSNs schwärzen."""
text = re.sub(r'\b[\w.]+@[\w.]+\.\w+\b', '[EMAIL]', text)
text = re.sub(r'\b\d{3}[-.]?\d{3}[-.]?\d{4}\b', '[TELEFON]', text)
text = re.sub(r'\b\d{3}-\d{2}-\d{4}\b', '[SSN]', text)
return text
msg = "Contact john@example.com or call 555-123-4567. SSN: 123-45-6789"
print(redact_pii(msg))
# Contact [EMAIL] or call [TELEFON]. SSN: [SSN]Textdaten in Jupyter verarbeiten
Textbereinigung und -transformation ist iterative Arbeit -- Sie testen Muster gegen Beispieldaten, passen Regex an und überprüfen Ergebnisse. RunCell (opens in a new tab) ist ein KI-Agent für Jupyter, der Ihnen hilft, Textverarbeitungs-Pipelines interaktiv aufzubauen und zu debuggen und Ersetzungsmuster in Echtzeit gegen Ihre tatsächlichen Daten zu testen.
FAQ
Wie ersetze ich einen Teilstring in Python?
Verwenden Sie str.replace(old, new) für einfache Ersetzungen: "hello world".replace("world", "python") gibt "hello python" zurück. Dies ersetzt alle Vorkommen. Fügen Sie ein drittes Argument hinzu, um Ersetzungen zu begrenzen: text.replace("a", "b", 2) ersetzt nur die ersten 2 Treffer.
Wie führe ich eine Groß-/Kleinschreibung-unabhängige Ersetzung in Python durch?
Verwenden Sie re.sub() mit dem re.IGNORECASE-Flag: re.sub(r'python', 'Java', text, flags=re.IGNORECASE). Die eingebaute Methode str.replace() unterstützt keinen Groß-/Kleinschreibung-unabhängigen Abgleich.
Wie ersetze ich mehrere verschiedene Strings gleichzeitig?
Erstellen Sie ein Regex-Muster aus einem Wörterbuch von Ersetzungen: Erstellen Sie ein kompiliertes Muster, das alle Schlüssel abgleicht, und verwenden Sie dann ein Lambda, um die Ersetzung für jeden Treffer nachzuschlagen. Alternativ können Sie .replace()-Aufrufe für eine kleine Anzahl literaler Ersetzungen verketten.
Was ist der Unterschied zwischen str.replace() und re.sub()?
str.replace() führt nur literalen String-Abgleich durch -- es ist schneller und einfacher. re.sub() verwendet reguläre Ausdrücke und unterstützt Musterabgleich, Erfassungsgruppen, Rückverweise und funktionsbasierte Ersetzungen. Verwenden Sie str.replace() für einfache literale Austausche und re.sub(), wenn Sie Musterflexibilität benötigen.
Wie entferne ich Zeichen aus einem String in Python?
Drei Ansätze: str.replace(char, "") entfernt alle Vorkommen eines bestimmten Teilstrings. str.translate(str.maketrans("", "", chars)) entfernt alle angegebenen Zeichen effizient. re.sub(r"[pattern]", "", text) entfernt Zeichen, die einem Regex-Muster entsprechen.
Fazit
Python bietet mehrere Werkzeuge für die String-Ersetzung, die jeweils für unterschiedliche Komplexitätsstufen geeignet sind. Verwenden Sie str.replace() für einfache literale Austausche, re.sub() für Musterabgleich und komplexe Regeln und str.translate() für schnelle zeichenweise Zuordnung. Für mehrere gleichzeitige Ersetzungen hält ein wörterbuchgesteuerter re.sub()-Ansatz Ihren Code sauber und wartbar.