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

Как найти индекс подстроки в строке на Python

В этой статье вы узнаете, как найти индекс подстроки в строке, будь то первый или последний индекс подстроки. Также вы научитесь находить все индексы подстроки в строке.

Работа со строками — важный навык в процессе изучения Python. Вы узнаете, как создать список всех позиций индексов, где встречается подстрока.

Содержание

Как использовать Python для нахождения первого индекса подстроки в строке

Если вам нужно найти первый индекс подстроки в строке на Python, вы можете легко сделать это с помощью метода str.index(). Этот метод встроен в Python, поэтому вам не нужно импортировать дополнительные библиотеки.

Пример использования метода str.index():

# Найти первый индекс подстроки 'the'
a_string = "the quick brown fox jumps over the lazy dog. the quick brown fox jumps over the lazy dog"

index = a_string.index('the')
print(index)

# Возвращает: 0

Метод .index() принимает параметр подстроки, которую вы ищете. В данном примере метод возвращает 0, что означает, что подстрока начинается с нулевой позиции строки (она является первым словом).

Теперь рассмотрим, как найти последний индекс подстроки в строке на Python.

Как использовать Python для нахождения последнего индекса подстроки в строке

Иногда нужно найти последний индекс подстроки в строке на Python. Для этого нельзя использовать метод .index(), но встроенный метод .rindex(), который ищет справа налево, поможет вам найти самый правый индекс подстроки.

Пример использования метода str.rindex():

# Найти последний индекс подстроки 'the'
a_string = "the quick brown fox jumps over the lazy dog. the quick brown fox jumps over the lazy dog"

index = a_string.rindex('the')
print(index)

# Возвращает: 76

В этом примере метод .rindex() возвращает индекс последнего вхождения подстроки в строке.

Как использовать регулярные выражения (Regex) и метод finditer для нахождения всех индексов подстроки в строке

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

Пример использования регулярных выражений для нахождения всех индексов подстроки:

import re

# Найти все индексы подстроки 'the'
a_string = "the quick brown fox jumps over the lazy dog. the quick brown fox jumps over the lazy dog"

indices_object = re.finditer(pattern='the', string=a_string)
indices = [index.start() for index in indices_object]
print(indices)

# Возвращает: [0, 31, 45, 76]

Разберём этот пример шаг за шагом:

  1. Импортируем библиотеку re и задаём переменную a_string, как в предыдущих примерах.

  2. Используем метод re.finditer для создания итерационного объекта, содержащего все совпадения.

  3. Создаём списковое включение для получения значения .start(), что означает начальный индекс каждого совпадения.

  4. Выводим список начальных позиций индексов.

Как использовать списковое включение (list comprehension) в Python для нахождения всех индексов подстроки в строке

Если вы хотите найти все индексы подстроки в строке без использования библиотеки регулярных выражений, можно использовать списковое включение (list comprehension).

Пример использования спискового включения:

# Найти все индексы подстроки 'the'
a_string = "the quick brown fox jumps over the lazy dog. the quick brown fox jumps over the lazy dog"

indices = [index for index in range(len(a_string)) if a_string.startswith('the', index)]

print(indices)

# Возвращает: [0, 31, 45, 76]

Разберём работу этого кода:

  1. Мы итерируем числа от 0 до длины строки.

  2. Добавляем индекс в список, если подстрока, начиная с этого индекса, совпадает с искомой.

  3. Получаем список всех индексов, где подстрока встречается в строке.

Как создать пользовательскую функцию для нахождения всех индексов подстроки в строке на Python

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

Почему это нужно? Ни один из методов выше не предоставляет явного объяснения цели кода. Пользовательская функция делает код более читаемым и понятным.

Пример пользовательской функции:

# Создать пользовательскую функцию для нахождения всех индексов подстроки в строке
def find_indices_of_substring(full_string, sub_string):
    return [index for index in range(len(full_string)) if full_string.startswith(sub_string, index)]

# Пример использования
a_string = "the quick brown fox jumps over the lazy dog. the quick brown fox jumps over the lazy dog"
indices = find_indices_of_substring(a_string, 'the')
print(indices)

# Возвращает: [0, 31, 45, 76]

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

Заключение

В этой статье вы узнали, как использовать Python для нахождения первого, последнего и всех индексов подстроки в строке. Вы изучили методы работы с обычными строковыми методами, регулярными выражениями, списковыми включениями и пользовательскими функциями.

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

Last updated