HOWTO · Python
Zeichen in einer Zeichenkette in Python suchen
Erfahren Sie, wie Sie in Python den nullbasierten Index des ersten, letzten oder jedes Vorkommens eines Zeichens in einer Zeichenkette finden und fehlende Treffer behandeln.
Auf dieser Seite
Python-Zeichenketten verwenden nullbasierte Indizes: Das erste Zeichen steht an Index 0. Um ein Zeichen oder einen Teilstring zu suchen, verwenden Sie find() für den ersten Treffer, rfind() für den letzten Treffer oder index(), wenn bei einem fehlenden Treffer ein Fehler ausgelöst werden soll. find() und rfind() geben -1 zurück, wenn sie nichts finden. Mit enumerate() können Sie die Indizes aller Treffer sammeln. Die folgenden Codebeispiele wurden in der bereitgestellten Python-Laufzeit ausgeführt; die jeweils beobachteten Ergebnisse sind in den Abschnitten angegeben.
Diese Methoden durchsuchen Zeichenketten und unterscheiden Groß- und Kleinschreibung. Jede Methode erhält den gesuchten Wert und kann optional durch start und end begrenzt werden: start ist eingeschlossen, end ausgeschlossen. Zum Beispiel durchsucht s.find("n", 6, 13) nur den Ausschnitt von Index 6 bis einschließlich Index 12. Das Ergebnis ist ein Index, der vom Anfang der ursprünglichen Zeichenkette an gezählt wird, nicht relativ zum durchsuchten Ausschnitt.
Mit der Methode find() den ersten Treffer finden und fehlende Treffer behandeln
Rufen Sie find() für die Zeichenkette auf und übergeben Sie das Zeichen oder den Teilstring, den Sie suchen. Die Methode gibt den Index des ersten Treffers von links nach rechts zurück. Ist der Wert nicht vorhanden, gibt sie -1 zurück. Prüfen Sie dieses Ergebnis daher, bevor Sie es als Index verwenden.
Für s = "python is fun" und c = "n" gibt s.find(c) den Wert 5 zurück: Das erste n steht am nullbasierten Index 5. Die allgemeine Form lautet string.find(substring, start, end). Wenn Sie die optionalen Grenzen weglassen, wird die gesamte Zeichenkette durchsucht.
Hier ist ein vollständiges Beispiel für die Suche nach dem ersten Treffer:
s = "python is fun"
c = "n"
print(s.find(c))
Das Beispiel sucht ab dem Anfang von s. Es gibt 5 aus. Wenn die Suche keinen Treffer ergeben könnte, können Sie den Fall ausdrücklich behandeln, indem Sie etwa position = s.find(c) setzen und anschließend mit if position != -1: prüfen.
Mit der Methode rfind() den letzten Treffer finden
Verwenden Sie rfind(), wenn Sie das letzte Vorkommen eines Zeichens oder Teilstrings benötigen. Die Methode sucht von rechts und gibt den höchsten passenden Index zurück; der Index selbst wird weiterhin von links gezählt. Wie find() akzeptiert sie die optionalen Grenzen start und end und gibt -1 zurück, wenn es keinen Treffer gibt.
Für dieselbe Zeichenkette und dasselbe Zeichen gibt s.rfind(c) den Wert 12 zurück. Das ist der Index des letzten n in "python is fun". Die allgemeine Form lautet string.rfind(substring, start, end).
s = "python is fun"
c = "n"
print(s.rfind(c))
Das Ergebnis ist hier 12. Verwenden Sie find(), wenn der früheste Treffer zählt, und rfind(), wenn Sie den spätesten Treffer benötigen. Keine der beiden Methoden löst allein deshalb einen Fehler aus, weil der Suchwert nicht vorhanden ist.
Mit der Methode index() suchen, wenn ein fehlender Treffer einen Fehler auslösen soll
Auch index() gibt den Index des ersten Treffers zurück und akzeptiert dieselben optionalen Grenzen start und end. Der entscheidende Unterschied zu find() zeigt sich bei einem fehlenden Treffer: Ist das Zeichen oder der Teilstring nicht vorhanden, löst index() ValueError aus, statt -1 zurückzugeben. Verwenden Sie die Methode, wenn das Fehlen als Fehler behandelt werden soll; mit find() können Sie das Fehlen anhand des Rückgabewerts prüfen.
Für s = "python is fun" und c = "n" gibt s.index(c) den Wert 5 zurück. Die allgemeine Form lautet string.index(substring, start, end).
s = "python is fun"
c = "n"
print(s.index(c))
Dieses Beispiel sucht nach dem ersten n und liefert daher 5. Beschreiben Sie den Fall ohne Treffer nicht so, als würde index() ValueError zurückgeben: Die Methode löst diese Ausnahme aus. Bei Bedarf können Aufrufer sie mit einer try/except-Anweisung behandeln.
Mit einer for-Schleife und enumerate() alle passenden Indizes finden
find(), rfind() und index() geben jeweils nur einen passenden Index zurück. Um jedes Vorkommen zu finden, durchlaufen Sie die Zeichenkette mit enumerate(), das jedes Zeichen mit seinem nullbasierten Index verknüpft. Fügen Sie den Index hinzu, sobald das Zeichen dem gesuchten Wert entspricht.
s = "python is fun"
c = "n"
lst = []
for pos, char in enumerate(s):
if char == c:
lst.append(pos)
print(lst)
In dieser Zeichenkette lauten die passenden Indizes [5, 12]: Die beiden n stehen an den Indizes 5 und 12. Dasselbe Ergebnis lässt sich mit dem List-Comprehension-Ausdruck [pos for pos, char in enumerate(s) if char == c] erzielen. Dabei stehen die Iteration und die Bedingung für einen Treffer zusammen, wenn kein eigener Schleifenrumpf benötigt wird.
Beide Varianten untersuchen die Zeichen der Reihe nach und verwenden dieselben nullbasierten Indizes. Wählen Sie die Schleife, wenn Sie für jeden Treffer weitere Schritte ausführen möchten, und die List Comprehension, wenn Sie lediglich die passenden Indizes sammeln wollen.