> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/python/python-strings/python-rfind-nakhozhdenie-indeksa-poslednei-podstroki-v-stroke.md).

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

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

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

#### Оглавление

* [Python `rfind`: Найти индекс последней подстроки в строке](#python-rfind-naiti-indeks-poslednei-podstroki-v-stroke)
* К[ак использовать Python `rfind` в подстроке](#kak-ispolzovat-python-rfind-v-podstroke)
* [Различия между Python `rfind` и `rindex`](#razlichiya-mezhdu-python-rfind-i-rindex)
* [Проверка, существует ли подстрока только один раз в строке Python](#proverka-sushestvuet-li-podstroka-tolko-odin-raz-v-stroke-python)
* [Заключение](#zaklyuchenie)

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

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

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

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

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

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

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

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

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

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

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

```python
# Использование 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
# Использование 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()` вызовет <mark style="color:orange;">**ValueError**</mark>.

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

```python
# Различие между .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()`.

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

```python
# Проверка, существует ли подстрока только один раз в строке
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()`
* Функция вернет <mark style="color:blue;">**True**</mark>, если строка существует только один раз, и <mark style="color:blue;">**False**</mark>, если существует несколько раз (или не существует вообще)

### Заключение

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

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

Чтобы узнать больше о методе `.rfind()`, [ознакомьтесь с официальной документацией.](https://docs.python.org/3/library/stdtypes.html?highlight=rfind#str.rfind).
