543 Stimmen

Index des letzten Vorkommens einer Teilzeichenkette in einer Zeichenkette finden

Ich möchte die Position (oder den Index) des letzten Vorkommens einer bestimmten Teilzeichenkette in einer gegebenen Eingabezeichenkette finden str .

Nehmen wir zum Beispiel an, die Eingabezeichenkette lautet str = 'hello' und die Teilzeichenkette lautet target = 'l' dann sollte es 3 ausgeben.

Wie kann ich das tun?

870voto

Rik Poggi Punkte 27010

Utilice .rfind() :

>>> s = 'hello'
>>> s.rfind('l')
3

Verwenden Sie auch nicht str als Variablennamen zu verwenden, oder Sie werden die eingebaute str() .

123voto

oHo Punkte 45335

Sie können verwenden rfind() o rindex()
Python2-Links: rfind() rindex()

>>> s = 'Hello StackOverflow Hi everybody'

>>> print( s.rfind('H') )
20

>>> print( s.rindex('H') )
20

>>> print( s.rfind('other') )
-1

>>> print( s.rindex('other') )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

Der Unterschied besteht darin, dass die Teilzeichenkette nicht gefunden wird, rfind() gibt zurück. -1 während rindex() löst eine Ausnahme aus ValueError (Python2-Link: ValueError ).

Wenn Sie nicht prüfen wollen, ob die rfind() Rückgabecode -1 bevorzugen Sie vielleicht rindex() die eine verständliche Fehlermeldung liefert. Andernfalls können Sie nach Minuten suchen, in denen der unerwartete Wert -1 aus Ihrem Code kommt...


Beispiel: Suche nach dem letzten Zeilenumbruchszeichen

>>> txt = '''first line
... second line
... third line'''

>>> txt.rfind('\n')
22

>>> txt.rindex('\n')
22

50voto

rmmh Punkte 6831

Verwenden Sie die str.rindex Methode.

>>> 'hello'.rindex('l')
3
>>> 'hello'.index('l')
2

13voto

Adi219 Punkte 4560

Ich will nicht einen inaktiven Beitrag wiederbeleben, aber da dies noch nicht gepostet wurde...

(So habe ich es gemacht, bevor ich diese Frage fand)

s = "hello"
target = "l"
last_pos = len(s) - 1 - s[::-1].index(target)

Erläuterung: Wenn Sie nach dem letzten Vorkommen suchen, suchen Sie eigentlich nach dem ersten Vorkommen in der umgekehrten Zeichenfolge. Da ich das weiß, habe ich s[::-1] (die eine umgekehrte Zeichenkette zurückgibt), und dann die Indizierung der target von dort aus. Dann habe ich len(s) - 1 - the index found denn wir wollen den Index in der nicht umgedreht (d.h. die ursprüngliche) Zeichenfolge.

Aber aufgepasst! Wenn target mehr als ein Zeichen ist, werden Sie es wahrscheinlich nicht in der umgekehrten Zeichenfolge finden. Um dies zu beheben, verwenden Sie last_pos = len(s) - 1 - s[::-1].index(target[::-1]) die nach einer umgekehrten Version von target .

9voto

Gad Punkte 69

Versuchen Sie dies:

s = 'hello plombier pantin'
print (s.find('p'))
6
print (s.index('p'))
6
print (s.rindex('p'))
15
print (s.rfind('p'))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X