Проверка того, содержит ли строка подстроку, является одной из самых распространенных задач в любом языке программирования. 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 можно установить нечувствительность к регистру. Так что, метод есть )