Проверка того, содержит ли строка подстроку, является одной из самых распространенных задач в любом языке программирования. Python предлагает множество способов ее решения. Самый простой и быстрый способ узнать, содержит ли строка подстроку, — использовать оператор in. Но есть и другие варианты, например использование find(), index(), count().
Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU
Использование оператора in
Оператор in проверяет, входит ли операнд слева в операнд справа. Возвращает он соответственно True или False. В нашем случае in возвращает True, если строка содержит указанную подстроку.
str = "Hello, World!"
print("World" in str)
# True
Примечание: оператор 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() — это менее питонический подход, но им пользуются. Он длиннее и немного запутаннее, но с поставленной задачей справляется.


Использование регулярных выражений 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.


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

Спасибо за статью. Все указанные способы «чувствительны» к регистру. Есть ли короткий метод агностичный к регистру (без использования конструкций предобработки регистра и тд)?
Автор умолчал то, что флагами re.I или re.IGNORECASE можно установить нечувствительность к регистру. Так что, метод есть )
У строки можно вызвать метод .lower() или .upper() для сравнения. Первый возвращает измененную строку полностью в нижнем регистре, второй — в верхнем.
И тогда можно сравнивать следующим способом
‘hello’ in str.lower()
‘HELLO’ in str.upper()