Python rfind: Нахождение индекса последней подстроки в строке

В этом руководстве вы узнаете, как использовать метод rfind() в Python для поиска последнего индекса подстроки в строке. По сути, этот метод ищет с правой стороны и возвращает индекс крайнего правого подстрока.

Вы научитесь использовать метод Python .rfind(), узнаете о его параметрах, чем он отличается от .rindex(), и как использовать метод для проверки, существует ли подстрока только один раз в строке.

Оглавление

Python rfind: Найти индекс последней подстроки в строке

Метод .rfind() в Python работает похоже на метод .find() в Python.

Метод .find() ищет подстроку в строке и возвращает ее индекс. Однако метод .rfind() ищет с правой стороны текста и возвращает первый найденный индекс – то есть возвращает последний индекс данной подстроки в строке.

Некоторые важные моменты о методе .rfind():

  • Возвращаемый индекс отмечает начальный индекс подстроки (т.е. для многобуквенной подстроки будет возвращен индекс первой буквы)

  • Если подстрока не существует, метод возвращает -1

Давайте посмотрим, как можно использовать метод .rfind() для поиска индекса последней подстроки в строке в Python:

# Использование Python .rfind() для поиска индекса последней подстроки
sentence = 'She sells seashells by the sea-shore'

idx = sentence.rfind('sea')
print(idx)

# Возвращает 27

Здесь мы видим, что метод вернул позицию индекса 27.

Теперь поищем подстроку, для которой мы знаем, что она не существует:

# Использование Python .rfind() для поиска индекса последней подстроки
sentence = 'She sells seashells by the sea-shore'

idx = sentence.rfind('buys')
print(idx)

# Возвращает -1

Мы видим, что поиск 'buys' возвращает позицию индекса -1, что указывает на отсутствие подстроки в строке.

Как использовать Python rfind в подстроке

Метод .rfind() в Python также позволяет искать внутри подстроки большей строки, используя параметры start= и end=.

Посмотрим, как можно ограничить поиск подстроки:

# Использование Python .rfind() для поиска индекса последней подстроки с использованием start= и end=
sentence = 'She sells seashells by the sea-shore'

print(sentence.rfind('sea', 5, 20)) # Поиск: 'ells seashells '
print(sentence.rfind('sea', 0, 30)) # Поиск: 'She sells seashells by the sea'
print(sentence.rfind('sea', 0, -1)) # Поиск: 'She sells seashells by the sea-shor'

# Возвращает:
# 10
# 27
# 27

Различия между Python rfind и rindex

В Python есть два очень похожих метода: .rfind() и .rindex().

Эти два метода делают практически одно и то же, с одним существенным различием: метод .rfind() не вызовет ошибку, если данная подстрока не существует, в то время как метод .rindex() вызовет ValueError.

Посмотрим, как это работает на практике:

# Различие между .rfind() и .rindex()
sentence = 'She sells seashells by the sea-shore'

print(sentence.rfind('buys'))
print(sentence.rindex('buys'))

# Возвращает:
# -1
# ValueError: подстрока не найдена

Проверка, существует ли подстрока только один раз в строке Python

Бывают ситуации, когда вы хотите проверить, существует ли подстрока только один раз в строке Python.

Для этого можно использовать метод .rfind() в Python совместно с методом .find().

Это работает путем сравнения, возвращают ли два метода одинаковый индекс. Причина в том, что если индекс первого и последнего вхождения подстроки совпадает, значит подстрока существует только один раз.

# Проверка, существует ли подстрока только один раз в строке
sentence = 'She sells seashells by the sea-shore'

def single_substring(string, substring):
    return string.rfind(substring) == string.find(substring)

print(single_substring(sentence, 'seashells'))
print(single_substring(sentence, 'sea'))

# Возвращает:
# True
# False

Давайте рассмотрим, что мы сделали:

  • Мы определили функцию single_substring(), которая принимает строку и подстроку в качестве аргументов

  • Функция возвращает логическое значение, оценивая, совпадают ли результаты методов .rfind() и .find()

  • Функция вернет True, если строка существует только один раз, и False, если существует несколько раз (или не существует вообще)

Заключение

В этом руководстве вы узнали, как использовать метод .rfind() в Python. Метод ищет подстроку в строке Python и возвращает индекс крайнего правого подстрока. Если подстрока не найдена, возвращается значение -1.

Вы научились использовать метод и все его аргументы. Вы также узнали, как использовать аргументы метода для поиска только в подстроке. Кроме того, вы изучили различия между методами .rfind() и .rindex() в Python. Наконец, вы научились реализовывать метод .rfind() с нуля.

Чтобы узнать больше о методе .rfind(), ознакомьтесь с официальной документацией..

Last updated