Как проверить наличие подстроки в строке python
Перейти к содержимому

Как проверить наличие подстроки в строке python

  • автор:

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

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

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: поиск в строке

В сегодняшнем посте разбираем поиск подстроки в строке. Задачи стоят элементарнейшие. В отличие от задача по преобразованию строки в число, задачи по поиску решаются в python с помощью встроенных функций. Для решения наших задач определим строки:

# исходная строка string = "Some string for example." # подстрока, которая явно входит в исходную строку substring = "string" # подстрока, которая явно не ходит в исходную строку other_substring = "other string"

Задача №1 — узнать, входит ли подстрока в строку. Операция substring in string вернет нам в результате логический ответ: True в случае, если substring входит в строку, и False в случае, если не входит. Для наглядности приведу ниже пример.

# Для начала хотим узнать, входит ли подстрока в строку if substring in string: print ("Подстрока "%s" входит в строку "%s"" % (substring, string)) else: print ("Подстрока "%s" не входит в строку "%s"" % (substring, string)) # Та же самая процедура с другой подстрокой if other_substring in string: print ("Подстрока "%s" входит в строку "%s"" % (other_substring, string)) else: print ("Подстрока "%s" не входит в строку "%s"" % (other_substring, string))

Задача №2 — узнать позицию вхождения подстроки в строку. Данную задачу решаем с помощью функции find(self, sub[, start[, end]]). Сразу перейдем к примерам:

# Узнаем, с какой позиции подстрока входит в строку print(string.find(substring)) # 5 # Ищем, начиная с позиции 20 print(string.find(substring, 20)) # 44 # Ищем в диапазоне позиций 20 - 30 print(string.find(substring, 20, 30)) # -1 # И смотрим на результат, если подстрока не входит в строку print(string.find(other_substring)) # -1

Далее стоит перед нами задача №3 — вычислить количество вхождений подстроки в строку. С ней легко справляется функция count(self, sub[, start[, end]])

# Нам интересно количество вхождений подстроки в строку print(string.count(substring)) # 2

Задача №4 — проверить входит ли подстрока в строку без учета регистра. Для этого мы воспользуемся функцией преобразования символов строки в нижний/верхний регистр и применим к примеру №1.

# Для начала хотим узнать, входит ли подстрока в строку if substring.lower() in string.lower(): print ("Подстрока "%s" входит в строку "%s"" % (substring, string)) else: print ("Подстрока "%s" не входит в строку "%s"" % (substring, string)) # Та же самая процедура с другой подстрокой if other_substring.upper() in string.upper(): print ("Подстрока "%s" входит в строку "%s"" % (other_substring, string)) else: print ("Подстрока "%s" не входит в строку "%s"" % (other_substring, string))

На этом я остановлюсь, пожалуй. Если возникли вопросы, пожелания или предложения, то оставляйте комментарии. Отвечу всем.

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

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

my_list = ['hello world', 'python is cool', 'welcome to python', 'hello again']

И необходимо проверить, содержат ли элементы списка подстроку ‘hello’. Некоторые могут попытаться выполнить эту задачу следующим образом:

if 'hello' in my_list:

Однако, этот код проверяет, есть ли точное совпадение со строкой ‘hello’ в списке, и вернет False , так как нет ни одного элемента, который бы был точно равен ‘hello’.

Чтобы проверить, содержат ли элементы списка подстроку, нужно выполнить проверку для каждого элемента списка. Это можно сделать с помощью цикла for .

for item in my_list: if 'hello' in item: print(f'"" contains "hello"')

Этот код будет проверять каждый элемент списка my_list на наличие подстроки ‘hello’. Если подстрока найдена, то на экран выводится сообщение, что данная строка содержит ‘hello’.

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

Поиск подстроки в строке

Нужно найти в строке: входит ли данная строчка в строку или нет. например, есть строка sdfssf sddff svvsef xbsdf sdfwwe нужно узнать входит ли в нее dff или нет.

Отслеживать
6,389 4 4 золотых знака 35 35 серебряных знаков 57 57 бронзовых знаков
задан 12 июл 2013 в 7:30
151 3 3 золотых знака 3 3 серебряных знака 11 11 бронзовых знаков

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

if "dff" in "sdfssf sddff svvsef xbsdf sdfwwe": print u"Входит!" 

Отслеживать
ответ дан 12 июл 2013 в 7:31
4,666 16 16 серебряных знаков 15 15 бронзовых знаков
опередил на 4 секунды=)
12 июл 2013 в 7:32
а если нужно узнать с какой позиции входит?
12 июл 2013 в 7:35

в комментариях нельзя оформлять красиво код? try: index = s1.index(«dff») except ValueError: print «substring not found»

12 июл 2013 в 7:41

использовать метод find . s1 = «sdfssf sddff svvsef xbsdf sdfwwe» index = s1.find(‘dff’) Этот код делает ровно то же самое, что и в ответе ниже, но выглядит опрятнее, т.к. оно без вложенности.

12 июл 2013 в 8:12
полностью согласен.
12 июл 2013 в 8:14

S1 = 'sdfssf sddff svvsef xbsdf sdfwwe' S2 = 'dff' Count = S1.count(S2) if Count == 0: print('Не входит') else: print('Входит') 

Если что — S.count(str) — это функция, которая считает количество вхождений str в S

Отслеживать
ответ дан 8 июл 2018 в 14:00
Влад Волостнов Влад Волостнов
41 2 2 бронзовых знака
то что надо))))
15 июн 2022 в 18:13

Можно с помощью множеств, например при чтении с файла пропускать строки, в которые входит определенное слово:

ignore = ['str1', 'str2', 'str3', 'str4'] with open(file,"r") as f: for line in f.readlines(): if not (set(ignore) & set(line.split())): print(line, end="") 

Отслеживать
ответ дан 12 фев 2018 в 21:58
Александр В Александр В
9 1 1 бронзовый знак

ваш код пытается напечатать строки из файла, которые не содержат слова, разделённые пробелом, из заданного списка ignore ( grep -vwFf ignore file ). Этот код не ищет подстроку в строке. Связанный вопрос о том как задачу в ответе эффективно реализовать

13 фев 2018 в 6:42

line_1 — слово которое ищешь. line_2 — где ищешь. 100 — это вероятное совпадения.

def find_word_per(line_1, line_2, percent=100): max_found = 0 for item_1 in range(len(line_1)): for item_2 in range(len(line_2)): index_found = 0 if line_1[item_1] == line_2[item_2]: for index in range(len(line_2) - item_2): if item_1 + index >= len(line_1): break elif line_1[item_1 + index] == line_2[item_2 + index]: index_found += 1 if max_found < index_found: max_found = index_found result_per = (100 / len(line_1)) * max_found return result_per >= percent 

Может кому поможет, мою проблему решил.

Отслеживать
ответ дан 13 янв 2022 в 13:39
Andrew Terleckiy Andrew Terleckiy
35 4 4 бронзовых знака
Это ответ на какой-то другой вопрос
13 янв 2022 в 13:44
Добавил сюда так-как меня поисковики часто сюда бросали.
13 янв 2022 в 13:48

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

13 янв 2022 в 13:51
почему не подходящий? test_find(«dff», «sdfssf sddff svvsef xbsdf sdfwwe», 100) # True
13 янв 2022 в 13:55

Потому что в вопросе нужно просто определить, есть ли подстрока в строке. Это решается одним выражением (через in). У вас какая-то другая проблема. Предположим, у кого-то будет похожая проблема, но он на свой вопрос не найдет ответ, потому что ваш ответ не под вопросом с подробным описанием именно вашей проблемы (который будет проиндексирован поисковиками), а где-то под вопросом с совсем другой проблемой.

13 янв 2022 в 13:58

Highly active question. Earn 10 reputation (not counting the association bonus) in order to answer this question. The reputation requirement helps protect this question from spam and non-answer activity.

  • python
  • строки

Добавить комментарий

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