Python есть ли строка в строке

Python поиск в строке

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

Если вы раньше (до перехода на Python) писали код, скажем, на Java, для подобной проверки вы могли использовать метод contains.

В Python есть два способа достичь той же цели.

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

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

Давайте рассмотрим пример.

>>> str = "Messi is the best soccer player" >>> "soccer" in str True >>> "football" in str False

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

Этот метод очень простой, понятный, читаемый и идиоматичный.

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

Также для проверки вхождения одной строки в другую можно использовать строковый метод find .

В отличие от оператора, возвращающего булево значение, метод find возвращает целое число.

Это число является по сути индексом начала подстроки, если она есть в указанной строке. Если этой подстроки в строке не содержится, метод возвращает -1 .

Давайте посмотрим, как работает метод find .

>>> str = "Messi is the best soccer player" >>> str.find("soccer") 18 >>> str.find("Ronaldo") -1 >>> str.find("Messi") 0

Что особенно хорошо в применении этого метода — вы можете при желании ограничить пределы поиска, указав начальный и конечный индекс.

>>> str = "Messi is the best soccer player" >>> str.find("soccer", 5, 25) 18 >>> str.find("Messi", 5, 25) -1

Обратите внимание, что для подстроки «Messi» метод вернул -1 . Это произошло потому, что мы ограничили поиск в строке промежутком символов с индексами от 5-го до 25-го.

Более сложные способы

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

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

Есть лучшие алгоритмы поиска строк. Если вы хотите углубиться в эту тему, можем порекомендовать статью «Rabin-Karp and Knuth-Morris-Pratt Algorithms». Также вам может пригодиться статья «Поиск подстроки» в Википедии.

Если вы прочитаете указанные статьи, у вас может родиться закономерный вопрос: так какой же алгоритм используется в Python?

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

Python поиск в строке

Как удачно, что разработчики прокомментировали свой код! Теперь нам совершенно ясно, что метод find использует смесь алгоритмов Бойера-Мура и Бойера-Мура-Хорспула.

Заключение

Для проверки, содержится ли указанная строка в другой строке, в Python можно использовать оператор in или метод find .

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

Метод find возвращает индекс начала подстроки в строке, если эта подстрока там есть, или -1 — если подстрока не найдена.

CPython использует для поиска строк комбинацию алгоритмов Бойера-Мура и Бойера-Мура-Хорспула.

Источник

Проверяем наличие подстроки в строке

В этой статье мы расскажем о четырех способах найти подстроку в строке. У каждого способа есть плюсы и минусы — о них мы также кратко поговорим.

1) Оператор in

Простейший способ проверить наличие подстроки в строке — оператор in . Он используется для проверки наличия элемента в какой-либо структуре данных. Этот оператор возвращает булево значение — True или False . Пример:

fullstring = "pythonist" substring = "python" if substring in fullstring: print "Подстрока найдена!" else: print "Подстрока не найдена!"

Этот оператор — сокращенный вызов метода __contains__ . Он подходит и для проверки наличия элемента в списке.

2) Метод String.index()

Тип string имеет метод index . Он возвращает наименьший индекс, по которому обнаруживается начало подстроки в строке. Если подстрока не найдена, то возбуждается исключение ValueError . Реализовать его можно с помощью блока try-except-else.

fullstring = "pythonist" substring = "python" try: fullstring.index(substring) except ValueError: print "Подстрока не найдена!" else: print "Подстрока найдена!"

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

3) Метод String.find()

Тип string имеет еще один метод — find . Он удобнее, чем index , потому что благодаря ему нам не нужно думать об обработке ошибок. Если метод не находит подстроку в строке, он возвращает -1 . В случае успеха он возвращает наименьший индекс, по которому обнаруживается подстрока.

fullstring = "pythonist" substring = "python" if fullstring.find(substring) != -1: print "Подстрока найдена!" else: print "Подстрока не найдена!"

Если вы не хотите обрабатывать ошибки — отдайте предпочтение этому методу, а не index .

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

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

from re import search fullstring = "pythonist" substring = "python" if search(substring, fullstring): print "Подстрока найдена!" else: print "Подстрока не найдена!"

Если вам нужны сложные сопоставления, например, учет регистра — этот метод подойдет вам лучше всего. Но у него есть и недостатки: сложность и скорость работы. То есть, в простеньких задачах его лучше не использовать.

Источник

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

Favorite

Добавить в избранное

Главное меню » Программирование » Python » Проверьте, содержит ли строка подстроку в Python

Python 3 - Строки

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

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

Независимо от того, нужно ли проверять строку в слове, букве или фразе, в Python вы можете легко использовать встроенные методы и проверку строки в операторе.

Стоит отметить, что вы получите логическое значение (True или False) или целое число, чтобы указать, содержит ли строка то, которую вы искали. Вы узнаете об этом больше, когда мы покажем код ниже.

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

Способ 1. Использование оператора «in»

Предположим, у вас уже есть строка «str», вот как она будет выглядеть:

stringexample = "terminator" "ter" in str

Выход для этого будет «True», потому что строка содержит то, что мы искали. Таким образом, если вы ищете что-то, а в строке этого нет, вы получите «False» в качестве вывода.

Если вы все еще не уверены, позвольте нам написать небольшую программу, чтобы объяснить то же самое:

stringexample = "Terminator" substring = "ter" if substring in stringexample: print ("Мы нашли строку!") else: print ("Строка не найдена!")

Выход для вышеуказанного кода будет:

Метод 2: Использование метода поиска

Если вы хотите использовать метод для поиска подстроки, вы можете использовать функция find(). Вот как это сделать:

stringexample = "kiki" stringexample.find("ki")

Причина вывода в том, что эта функция возвращает самое низкое значение индекса, когда найдена подстрока.

Если она возвращает -1, это означает, что строка не содержит этой подстроки.

Вот небольшая программа, чтобы показать это в действии:

stringexample = "Kiki" substring = "ki" if stringexample.find("ki") != -1: print ("Мы нашли строку!") else: print ("Строка не найдена!")

Выход для вышеуказанного кода будет:

Метод 3: Использование метода Contains

__contains __ () — еще одна функция, помогающая проверить, содержит ли строка определенную букву/слово.

Вот как вы можете использовать это:

stringexample = "kiki" stringexample.__contains__("k")

Вы получите вывод как True/False. Для приведенного выше фрагмента кода вы получите вывод в виде:

Обратите внимание, что при написании метода используются 4 символа подчеркивания (2 перед словом и 2 после).

Вот программа, чтобы объяснить то же самое:

stringexample = "kiki" if stringexample.__contains__("k") == True: print ("Да, нашел подстроку!") else: print ("Строка не найдена!")

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

Если у вас есть вопросы или предложения, пожалуйста, дайте нам знать.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Читайте также:  Java xml element type
Оцените статью