HOWTO · Python
Zeichen in einer Zeichenkette ersetzen in Python
Erfahren Sie, wie Sie ein Zeichen an einer bestimmten Position oder übereinstimmende Zeichen in einer Python-Zeichenkette ersetzen.
Auf dieser Seite
Python-Zeichenketten sind unveränderlich. Daher können Sie nicht direkt ein neues Zeichen an einer bestehenden Zeichenkette zuweisen. Erzeugen Sie stattdessen aus dem geänderten Wert eine neue Zeichenkette. Verwenden Sie eine Liste, wenn Sie ein Zeichen an einer bestimmten Position ändern möchten, replace(), wenn Sie passenden Text ersetzen möchten, oder Slicing, wenn die Position bereits bekannt ist. Ein bytearray() eignet sich für byteorientierte Daten wie ASCII; seine Indizes beziehen sich jedoch auf Bytes und nicht auf allgemeine Unicode-Zeichen.
Mit list() und join() ein Zeichen in einer Zeichenkette ersetzen
Wandeln Sie die Zeichenkette mit der eingebauten Funktion list() in eine Liste um, weisen Sie das Ersatzzeichen dem nullbasierten Index zu und fügen Sie die Zeichen anschließend wieder zusammen. Rufen Sie join() auf einer Trennzeichen-Zeichenkette auf, um die Listenelemente zu verbinden; "" fügt kein Trennzeichen ein. Der Index 2 bezeichnet beispielsweise das dritte Zeichen:
text = "Naze"
characters = list(text)
characters[2] = "m"
updated = "".join(characters)
print(updated)
Name
Mit diesem Ansatz ändern Sie ein Zeichen an einer Position; der ursprüngliche Zeichenkettenwert bleibt erhalten. updated verweist auf den neu zusammengefügten Text. Der Index muss einem Element der Liste entsprechen. Prüfen Sie daher die Länge der Zeichenkette, wenn die Position aus einer Benutzereingabe stammt.
Mit bytearray() ein Zeichen in einer Zeichenkette ersetzen
Bei byteorientiertem Text kodieren Sie die Zeichenkette zunächst, weisen einem veränderlichen bytearray() einen ganzzahligen Bytewert zu und dekodieren die Bytes anschließend wieder zu einer Zeichenkette. Dieses Beispiel verwendet ASCII, bei dem jedes gezeigte Zeichen durch ein Byte dargestellt wird:
text = "Naze"
data = bytearray(text, "ascii")
data[2] = ord("m")
updated = data.decode("ascii")
print(updated)
Name
Kodierung und Dekodierung müssen eine zueinander passende Zeichenkodierung verwenden. Ein Byteindex entspricht im Allgemeinen nicht dem Index eines Unicode-Zeichens: Ein Zeichen außerhalb von ASCII kann in UTF-8 mehrere Bytes belegen. Verwenden Sie dieses Verfahren nur, wenn die Kodierung der Daten und die Bytepositionen für die Aufgabe relevant sind. Für gewöhnlichen Text eignen sich die zeichenkettenbasierten Ansätze.
Mit der Methode replace() übereinstimmende Zeichen in einer Zeichenkette ersetzen
Rufen Sie die Zeichenkettenmethode replace() mit dem alten und dem neuen Text auf. Standardmäßig ersetzt sie jedes nicht überlappende Vorkommen des alten Textes und gibt das Ergebnis als neue Zeichenkette zurück:
text = "Naze"
updated = text.replace("z", "m")
print(updated)
Name
Der ursprüngliche Wert von text bleibt unverändert. Wenn nur eine begrenzte Anzahl von Treffern ersetzt werden soll, übergeben Sie diese Anzahl als optionales drittes Argument, zum Beispiel text.replace("a", "o", 1). Ist der alte Text nicht vorhanden, gibt replace() den Text unverändert zurück. So lässt sich eine abweichende Schreibweise von einem Zuweisungsproblem unterscheiden.
Mit Slicing und Verkettung ein Zeichen an einer bekannten Position ersetzen
Wenn Sie die nullbasierte Position kennen, übernehmen Sie den Präfix davor, fügen das Ersatzzeichen ein und hängen den Suffix danach an. Der Slice text[:2] behält die Zeichen vor Index 2; text[3:] beginnt nach diesem Zeichen:
text = "Naze"
updated = text[:2] + "m" + text[3:]
print(updated)
Name
So entsteht eine neue Zeichenkette, in der der umgebende Präfix und Suffix erhalten bleiben. Achten Sie darauf, dass der Suffix eine Position nach dem ersetzten Zeichen beginnt; mit einem falschen Index kann ein Zeichen fehlen oder doppelt vorkommen. Verwenden Sie diese Form, wenn die Position bereits bekannt ist und der Ausdruck für Ihren Anwendungsfall gut lesbar ist. Ein Geschwindigkeitsvergleich wird hier nicht vorgenommen.