Почему rfind и find возвращают одинаковые значения в Python 2.6.5?

Я относительно новичок в Python, и что-то действует. В основном, когда я звоню str.rfind("test") в строке вывод такой же, как str.find("test"). Лучше всего я покажу вам пример:

Python 2.6.5 (r265:79063, May  6 2011, 17:25:59) 
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import string
>>> line = "hello what's up"
>>> line.rfind("what")
6
>>> line.find("what")
6

насколько я понимаю, значение line.find - это хорошо, но значение line.rfind должно быть 9. Я неправильно интерпретирую эти функции или плохо их использую?

3 ответов


Я думаю, вы ожидаете rfind чтобы вернуть индекс самого правого символа в первом / самом левом совпадении для "what". Он фактически возвращает индекс самого левого символа в последнем/правой матч "what". Цитата документация:

str.rfind(sub[, start[, end]])

возвращает самый высокий индекс в строке, где substring sub нашел, такой, что sub содержится в s[start:end]. Необязательные аргументы старт и конец интерпретируются как в нотации среза. Возвращение -1 на провал.

"ab c ab".find("ab") будет 0, потому что самое левое вхождение находится на левом конце.
"ab c ab".rfind("ab") будет 5, потому что самое правое вхождение начинается с этого индекса.


чтобы лучше понять, что такое .rfind предназначен для, попробуйте свой пример со строкой типа " Привет, что случилось, привет, что случилось "(то есть более 1 появления "что")


найти() вернет индекс первого матча. Но!--2-->rfind даст вам последнее появление шаблона. Это будет ясно, если вы попытаетесь сопоставить повторный матч.

проверьте этот пример
       >>> string='hey! how are you harish'
       >>>string.find('h')
       >>>0                #it matched for first 'h' in the string
       >>> string.rfind('h')    
           22             #it matched for the last 'h' in the string