Как проверить, содержит ли строка подстроку

Проверка того, содержит ли строка подстроку, является одной из самых распространенных задач в любом языке программирования. Python предлагает множество способов ее решения. Самый простой и быстрый способ узнать, содержит ли строка подстроку, – использовать оператор in. Но есть и другие варианты, например использование find(), index(), count().

Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU

Использование оператора in

Оператор in проверяет, входит ли операнд слева в операнд справа. Возвращает он соответственно True или False. В нашем случае in возвращает True, если строка содержит указанную подстроку.

str = "Hello, World!"
print("World" in str)

# True

Примечание: оператор in чувствителен к регистру, т.е. он по-разному обрабатывает прописные и строчные символы.

Скриншот командной строки с несколькими вариантами применения оператора in

Функция __contains__()

Для проверки, содержит ли строка подстроку, можно использовать метод __contains__() из класса String. Когда мы используем оператор in, внутри класса вызывается функция __contains__(). Метод __contains__ определяет, как ведут себя экземпляры класса, когда они появляются справа от операторов in и not in. Мы можем использовать эту функцию и напрямую, но не стоит. Методы, начинающиеся с символов подчеркивания, считаются семантически приватными, однако для удобства чтения рекомендуется использовать оператор in.

Примечание редакции: с оператором in поближе можно познакомиться, прочитав статью “Операторы in и not in в Python”, а о других операторах читайте в статье “Операторы в Python”.

Использование метода str.find()

Еще один метод, который вы можете использовать, – это метод string.find(). Он оценивает, содержит ли строка подстроку. Если да, то возвращает начальный индекс подстроки в строке, иначе возвращает -1.

str = "Hello, World!"
if str.find("World")!= -1:
    print("Found the string")
else:
    print("Not found!!!")

# Found the string

Использование метода find() – это менее питонический подход, но им пользуются. Он длиннее и немного запутаннее, но с поставленной задачей справляется.

Проверка, содержит ли строка подстроку, при помощи метода find() (в командной строке). Метод возвращает индекс начала подстроки в строке

Использование регулярных выражений Python

Регулярные выражения широко применяются для сопоставления шаблонов. В Python есть встроенный пакет re, который можно использовать для работы с регулярными выражениями. Модуль re содержит функцию search(), с помощью которой можно проверить, содержит ли строка заданный шаблон поиска.

Синтаксис:

re.search(pattern, string, flags[optional])

Пример:

from re import search
str = "Hello, World!"
substring = "tack"
if search("World", str):
    print ("Substring Found!")
else:
    print ("Not found!")

# Substring Found!

Использование метода str.count()

Если вам нужно подсчитать количество вхождений определенной подстроки в строку, то вы можете использовать метод count(). Если подстрока не найдена в строке, функция возвращает 0.

Использование метода count() в командной строке

Перевод статьи «Check if String Contains Substring in Python».

3 комментария к “Как проверить, содержит ли строка подстроку”

  1. Михаил

    Спасибо за статью. Все указанные способы “чувствительны” к регистру. Есть ли короткий метод агностичный к регистру (без использования конструкций предобработки регистра и тд)?

    1. Вячеслав

      Автор умолчал то, что флагами re.I или re.IGNORECASE можно установить нечувствительность к регистру. Так что, метод есть )

    2. Артем

      У строки можно вызвать метод .lower() или .upper() для сравнения. Первый возвращает измененную строку полностью в нижнем регистре, второй — в верхнем.

      И тогда можно сравнивать следующим способом

      ‘hello’ in str.lower()
      ‘HELLO’ in str.upper()

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *