
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
- Geben Sie die maximale Anzahl von Ersetzungen an:
- 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.