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

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

В этом руководстве мы рассмотрим как проверить, содержит ли строка подстроку в Python.

Ассоциация in оператор

Самый простой способ проверить, содержит ли строка Python подстроку, — использовать метод in оператор.

Ассоциация in Оператор используется для проверки структур данных на членство в Python. Он возвращает логическое значение (либо True or False). Чтобы проверить, содержит ли строка подстроку в Python, используя in оператор, мы просто вызываем его для суперстроки:

fullstring = "StackAbuse"
substring = "tack"

if substring in fullstring:
    print("Found!")
else:
    print("Not found!")

Этот оператор является сокращением для вызова объекта __contains__ метод, а также хорошо работает для проверки наличия элемента в списке. Стоит отметить, что это не нулевой безопасный, поэтому, если наш fullstring указывал на None, будет выдано исключение:

TypeError: argument of type 'NoneType' is not iterable

Чтобы избежать этого, сначала вам нужно проверить, указывает ли он на None или нет:

fullstring = None
substring = "tack"

if fullstring != None and substring in fullstring:
    print("Found!")
else:
    print("Not found!")

Ассоциация Строка.индекс() Способ доставки

Тип String в Python имеет метод под названием index() его можно использовать для поиска начального индекса первого вхождения подстроки в строку.

Если подстрока не найдена, ValueError выдается исключение, которое можно обработать с помощью блока try-Exception-else:

fullstring = "StackAbuse"
substring = "tack"

try:
    fullstring.index(substring)
except ValueError:
    print("Not found!")
else:
    print("Found!")

Этот метод полезен, если вам также необходимо знать положение подстроки, а не просто ее существование внутри полной строки. Сам метод возвращает индекс:

print(fullstring.index(substring))

Хотя – ради проверки того, содержит ли строка подстроку, это многословный подход.

Метод String.find()

В классе String есть еще один метод, называемый find() который удобнее использовать, чем index(), главным образом потому, что нам не нужно беспокоиться об обработке каких-либо исключений.

If find() не находит совпадения, возвращает -1, в противном случае возвращает самый левый индекс подстроки в большей строке:

Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!

fullstring = "StackAbuse"
substring = "tack"

if fullstring.find(substring) != -1:
    print("Found!")
else:
    print("Not found!")

Естественно, он выполняет тот же поиск, что и index() и возвращает индекс начала подстроки в родительской строке:

print(fullstring.find(substring))

Регулярные выражения (RegEx)

Регулярные выражения предоставляют более гибкий (хотя и более сложный) способ проверки строк на соответствие шаблону. С помощью регулярных выражений вы можете выполнять гибкий и мощный поиск в гораздо больших пространствах поиска, а не простые проверки, как предыдущие.

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

from re import search

fullstring = "StackAbuse"
substring = "tack"

if search(substring, fullstring):
    print "Found!"
else:
    print "Not found!"

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

Об авторе

Эта статья была написана Джейкобом Стопаком, консультантом по программному обеспечению и разработчиком, страстно желающим помогать другим улучшить свою жизнь с помощью кода. Джейкоб — создатель Начальная фиксация – сайт, призванный помочь любознательным разработчикам узнать, как написаны их любимые программы. Представленный проект помогает людям изучить Git на уровне кода.

Отметка времени:

Больше от Стекабьюс