Skip to content

Ersetzen von Zeichenketten in Python (replace, translate, re.sub, re.subn)

Python

Dieser Artikel genau, wie man Strings in Python ersetzt.

  • Teilsaiten ersetzen:replace()
    • Geben Sie die maximale Anzahl von Ersetzungen an:count
    • Ersetzen Sie mehrere verschiedene Teilzeichenfolgen
    • Zeilenumbruchzeichen ersetzen
  • Mehrere unterschiedliche Zeichen ersetzen:translate()
  • Durch Regex ersetzen:re.sub(), re.subn()
    • Ersetzen Sie mehrere Teilstrings durch String
    • Durch das passende Teil ersetzen
    • Rufen Sie sterben Anzahl der ersetzten Teile ab


  • Ersetzen durch Position: Scheibe

Sie können den Teilstring auch entfernen, indem Sie ihn durch einen leeren String “ ersetzen.

Wenn Sie eine Teilzeichenfolge aus einer Zeichenfolge extrahieren möchten, anstatt sie zu ersetzen, lesen Sie den following Artikel.

Teilsaiten ersetzen:replace()

Use you replace(), um Teilstrings zu ersetzen.

Geben Sie den alten String old für das erste Argument und den neuen String new für das zweite Argument an.

s = 'one two one two one'

print(s.replace(' ', '-'))
# one-two-one-two-one

Wenn SIE die leere Zeichenfolge “ als neu angeben, wird die alte gelöscht.

print(s.replace(' ', ''))
# onetwoonetwoone

Geben Sie die maximale Anzahl von Ersetzungen an:count

Im dritten Parameter count can SIE sterben maximale Anzahl der Ersetzungen angeben. If count angegeben IST, Werden nur die ersten count-Vorkommen ersetzt.

print(s.replace('one', 'XXX'))
# XXX two XXX two XXX

print(s.replace('one', 'XXX', 2))
# XXX two XXX two one

Ersetzen Sie mehrere verschiedene Teilzeichenfolgen

Wenn SIE mehrere verschiedene Buchstaben durch dieselbe Zeichenfolge ersetzen, verwenden SIE den später beschriebenen regulären Ausdruck.

Es gibt keine Methode, um mehrere verschiedene Strings durch verschiedene zu ersetzen, aber Sie können replace() wiederholt anwenden.

print(s.replace('one', 'XXX').replace('two', 'YYY'))
# XXX YYY XXX YYY XXX

Es ruft nur replace() der Reihe nach auf, wenn also das erste neue das folgende alte enthält, wird das erste neue ebenfalls ersetzt. Sie müssen in der Reihenfolge vorsichtig sein.

print(s.replace('one', 'XtwoX').replace('two', 'YYY'))
# XYYYX YYY XYYYX YYY XYYYX

print(s.replace('two', 'YYY').replace('one', 'XtwoX'))
# XtwoX YYY XtwoX YYY XtwoX

Beim Ersetzen mehrerer Zeichen (eine Zeichenfolge der Länge 1) can SIE sterben unten beschriebene translate()-Methode verwenden.

Zeilenumbruchzeichen ersetzen

Wenn es nur einen Zeilenumbruchstyp gibt, können Sie ihn als erstes Argument von replace() angeben.

s_lines = 'onentwonthree'
print(s_lines)
# one
# two
# three

print(s_lines.replace('n', '-'))
# one-two-three

Seien Sie vorsichtig, wenn n (LF, used in Unix-Betriebssystemen incl. Mac) und rn (CR + LF, used in Windows-Betriebssystemen) gemischt werden.

Da n in rn enthalten IST, kann das gewünschte Ergebnis je nach Reihenfolge nicht erzielt werden. Das folgende Beispiel zeigt auch das Ergebnis von repr(), das n und r als Zeichenfolge ausgibt.

s_lines_multi = 'onentwornthree'
print(s_lines_multi)
# one
# two
# three

print(repr(s_lines_multi))
# 'onentwornthree'

print(s_lines_multi.replace('rn', '-').replace('n', '-'))
# one-two-three

print(repr(s_lines_multi.replace('rn', '-').replace('n', '-')))
# 'one-two-three'

print(s_lines_multi.replace('n', '-').replace('rn', '-'))
# -threeo

print(repr(s_lines_multi.replace('n', '-').replace('rn', '-')))
# 'one-twor-three'

Sie können splitlines() verwenden, das Eine Liste mit verschiedenen Newline-Zeichen aufteilen, und join(), das Listen mit Strings kombiniert.

Dieser Weg ist sicher und empfehlenswert, besonders wenn Sie nicht wissen, welche Zeilenumbruchzeichen enthalten sind.

print(s_lines_multi.splitlines())
# ['one', 'two', 'three']

print('-'.join(s_lines_multi.splitlines()))
# one-two-three

In den following Artikeln FINDEN SIE weitere Operationen im Zusammenhang mit dem Teilen von Zeichenfolgen und Zeilenumbrüchen.

Mehrere unterschiedliche Zeichen ersetzen:translate()

Verwenden Sie die translate()-Methode, um mehrere verschiedene Zeichen zu ersetzen.

Sie können die in translate() angegebene Übersetzungstabelle mit str.maketrans() erstellen.

Geben Sie ein Wörterbuch an, dessen Schlüssel das alte Zeichen und dessen Wert der neue String in str.maketrans() ist.

Das alte Zeichen muss ein Zeichen sein (eine Zeichenkette der Länge 1). Die neue Zeichenfolge ist eine Zeichenfolge oder None, wobei None alte Zeichen entfernt.

s = 'one two one two one'

print(s.translate(str.maketrans({'o': 'O', 't': 'T'})))
# One TwO One TwO One

print(s.translate(str.maketrans({'o': 'XXX', 't': None})))
# XXXne wXXX XXXne wXXX XXXne

str.maketrans() kann anstelle eines Wörterbuchs auch drei Strings als Argumente annehmen.

Das erste Argument ist ein String, in dem alte Zeichen verkettet sind, das zweite ist ein String, in dem neue Zeichen verkettet sind, und das dritte ist ein String, in dem zu löschende Zeichen verkettet sind.

print(s.translate(str.maketrans('ow', 'XY', 'n')))
# Xe tYX Xe tYX Xe

In diesem Fall müssen die Längen des ersten und zweiten Arguments übereinstimmen.

# print(s.translate(str.maketrans('ow', 'XXY', 'n')))
# ValueError: the first two maketrans arguments must have equal length

Durch Regex ersetzen:re.sub(), re.subn()

If SIE Eine Zeichenfolge ersetzen möchten, sterben mit Einem regulären Ausdruck (Regex) anstelle Einer Perfekten Übereinstimmung ersetzen, verwenden SIE sub() des re-Moduls.

Geben Sie in re.sub() im ersten Argument ein Regex-Muster, im zweiten einen neuen String und im dritten zu verarbeitenden String an.

import re

s = 'aaa@xxx.com bbb@yyy.com ccc@zzz.com'

print(re.sub('[a-z]*@', 'ABC@', s))
# ABC@xxx.com ABC@yyy.com ABC@zzz.com

Wie bei replace() can SIE sterben maximale Anzahl der Ersetzungen im vierten Parameter count angeben.

print(re.sub('[a-z]*@', 'ABC@', s, 2))
# ABC@xxx.com ABC@yyy.com ccc@zzz.com

Ersetzen Sie mehrere Teilstrings durch String

Die following zwei sind nützlich, um sich daran zu erinnern, selbst wenn Sie mit der Regex nicht vertraut sind.

Schließen Sie eine Zeichenfolge mit [] ein, um mit einem beliebigen einzelnen Zeichen darin übereinzustimmen. Sie können mehrere verschiedene Zeichen durch dieselbe Zeichenfolge ersetzen.

print(re.sub('[xyz]', '1', s))
# aaa@111.com bbb@111.com ccc@111.com

Wenn Muster durch | getrennt sind, stimmt es mit jedem Muster überein. Natürlich ist es möglich, Sonderzeichen eines regulären Ausdrucks für jedes Muster zu verwenden, aber es ist auch in Ordnung, wenn eine normale Zeichenfolge so angegeben wird, wie sie ist. Sie können mehrere verschiedene Zeichenfolgen durch dieselbe Zeichenfolge ersetzen.

print(re.sub('aaa|bbb|ccc', 'ABC', s))
# ABC@xxx.com ABC@yyy.com ABC@zzz.com

Durch das passende Teil ersetzen

If ein Teil des Musters in () Eingeschlossen IST, can SIE Eine Zeichenfolge verwenden, sterben mit dem in () Eingeschlossenen Teil in der neuen Zeichenfolge enthalten.

print(re.sub('([a-z]*)@', '\1-123@', s))
# aaa-123@xxx.com bbb-123@yyy.com ccc-123@zzz.com

print(re.sub('([a-z]*)@', r'1-123@', s))
# aaa-123@xxx.com bbb-123@yyy.com ccc-123@zzz.com

1 entspricht dem Teil, der zu () passt. Wenn mehrere () vorhanden sind, verwenden Sie sie wie 2, 3 … .

Es ist notwendig, wie \1 in einem normalen String (“ oder „“) zu maskieren, aber Sie können 1 in einen rohen String schreiben (r“ oder r““).

Rufen Sie sterben Anzahl der ersetzten Teile ab

re.subn() gibt ein Tupel des ersetzten Strings und die Anzahl der ersetzten Teile zurück.

t = re.subn('[a-z]*@', 'ABC@', s)
print(t)
# ('ABC@xxx.com ABC@yyy.com ABC@zzz.com', 3)

print(type(t))
# <class 'tuple'>

print(t[0])
# ABC@xxx.com ABC@yyy.com ABC@zzz.com

print(t[1])
# 3

Ersetzen durch Position: Scheibe

Es gibt keine Methode, um die Zeichenfolge an der angegebenen Position zu ersetzen.

Indem SIE die Zeichenfolge mit Einem Slice teilen und mit Einer anderen Zeichenfolge verketten, can SIE Eine neue Zeichenfolge erstellen, bei der die angegebene Position ersetzt WIRD.

s = 'abcdefghij'

print(s[:4] + 'XXX' + s[7:])
# abcdXXXhij

Die Länge des Strings (Anzahl Zeichen) kann mit len() ermittelt werden, also wie folgt geschrieben werden:

s_replace = 'XXX'
i = 4

print(s[:i] + s_replace + s[i + len(s_replace):])
# abcdXXXhij

Die Anzahl der Zeichen muss nicht übereinstimmen, da sie nur verschiedene Zeichenfolgen zwischen den geteilten Zeichenfolgen verkettet.

print(s[:4] + '-' + s[7:])
# abcd-hij

Es ist auch möglich, einen neuen String zu erstellen, indem Sie irgendwo im String einen anderen String einfügen.

print(s[:4] + '+++++' + s[4:])
# abcd+++++efghij

Weitere Informationen zum Slicing finden Sie im following Artikel.