Python проверить что строка содержит подстроку
Перейти к содержимому

Python проверить что строка содержит подстроку

  • автор:

Python проверить что строка содержит подстроку

Рассмотрим основные методы строк, которые мы можем применить в приложениях:

  • isalpha() : возвращает True, если строка состоит только из алфавитных символов
  • islower() : возвращает True, если строка состоит только из символов в нижнем регистре
  • isupper() : возвращает True, если все символы строки в верхнем регистре
  • isdigit() : возвращает True, если все символы строки — цифры
  • isnumeric() : возвращает True, если строка представляет собой число
  • startswith(str) : возвращает True, если строка начинается с подстроки str
  • endswith(str) : возвращает True, если строка заканчивается на подстроку str
  • lower() : переводит строку в нижний регистр
  • upper() : переводит строку в вехний регистр
  • title() : начальные символы всех слов в строке переводятся в верхний регистр
  • capitalize() : переводит в верхний регистр первую букву только самого первого слова строки
  • lstrip() : удаляет начальные пробелы из строки
  • rstrip() : удаляет конечные пробелы из строки
  • strip() : удаляет начальные и конечные пробелы из строки
  • ljust(width) : если длина строки меньше параметра width, то справа от строки добавляются пробелы, чтобы дополнить значение width, а сама строка выравнивается по левому краю
  • rjust(width) : если длина строки меньше параметра width, то слева от строки добавляются пробелы, чтобы дополнить значение width, а сама строка выравнивается по правому краю
  • center(width) : если длина строки меньше параметра width, то слева и справа от строки равномерно добавляются пробелы, чтобы дополнить значение width, а сама строка выравнивается по центру
  • find(str[, start [, end]) : возвращает индекс подстроки в строке. Если подстрока не найдена, возвращается число -1
  • replace(old, new[, num]) : заменяет в строке одну подстроку на другую
  • split([delimeter[, num]]) : разбивает строку на подстроки в зависимости от разделителя
  • partition(delimeter) : разбивает строку по разделителю на три подстроки и возвращает кортеж из трех элементов — подстрока до разделителя, разделитель и подстрока после разделителя
  • join(strs) : объединяет строки в одну строку, вставляя между ними определенный разделитель

Например, если мы ожидаем ввод с клавиатуры числа, то перед преобразованием введенной строки в число можно проверить, с помощью метода isnumeric() введено ли в действительности число, и если так, то выполнить операцию преобразования:

string = input("Введите число: ") if string.isnumeric(): number = int(string) print(number)

Проверка, начинается или оканчивается строка на определенную подстроку:

file_name = "hello.py" starts_with_hello = file_name.startswith("hello") # True ends_with_exe = file_name.endswith("exe") # False

Удаление пробелов в начале и в конце строки:

string = " hello world! " string = string.strip() print(string) # hello world!

Дополнение строки пробелами и выравнивание:

print("iPhone 7:", "52000".rjust(10)) print("Huawei P10:", "36000".rjust(10))
iPhone 7: 52000 Huawei P10: 36000

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

Для поиска подстроки в строке в Python применяется метод find() , который возвращает индекс первого вхождения подстроки в строку и имеет три формы:

  • find(str) : поиск подстроки str ведется с начала строки до ее конца
  • find(str, start) : параметр start задает начальный индекс, с которого будет производиться поиск
  • find(str, start, end) : параметр end задает конечный индекс, до которого будет идти поиск

Если подстрока не найдена, метод возвращает -1:

welcome = "Hello world! Goodbye world!" index = welcome.find("wor") print(index) # 6 # поиск с 10-го индекса index = welcome.find("wor",10) print(index) # 21 # поиск с 10 по 15 индекс index = welcome.find("wor",10,15) print(index) # -1

Замена в строке

Для замены в строке одной подстроки на другую применяется метод replace() :

  • replace(old, new) : заменяет подстроку old на new
  • replace(old, new, num) : параметр num указывает, сколько вхождений подстроки old надо заменить на new. По умолчанию num равно -1, что соответствует первой версии метода и приводит к замене всех вхождений.
phone = "+1-234-567-89-10" # замена дефисов на пробел edited_phone = phone.replace("-", " ") print(edited_phone) # +1 234 567 89 10 # удаление дефисов edited_phone = phone.replace("-", "") print(edited_phone) # +12345678910 # замена только первого дефиса edited_phone = phone.replace("-", "", 1) print(edited_phone) # +1234-567-89-10

Разделение на подстроки

Метод split() разбивает строку на список подстрок в зависимости от разделителя. В качестве разделителя может выступать любой символ или последовательность символов. Данный метод имеет следующие формы:

  • split() : в качестве разделителя используется пробел
  • split(delimeter) : в качестве разделителя используется delimeter
  • split(delimeter, num) : параметр num указывает, сколько вхождений delimeter используется для разделения. Оставшаяся часть строки добавляется в список без разделения на подстроки
text = "Это был огромный, в два обхвата дуб, с обломанными ветвями и с обломанной корой" # разделение по пробелам splitted_text = text.split() print(splitted_text) print(splitted_text[6]) # дуб, # разбиение по запятым splitted_text = text.split(",") print(splitted_text) print(splitted_text[1]) # в два обхвата дуб # разбиение по первым пяти пробелам splitted_text = text.split(" ", 5) print(splitted_text) print(splitted_text[5]) # обхвата дуб, с обломанными ветвями и с обломанной корой

Еще один метод — partition() разбивает строку по разделителю на три подстроки и возвращает кортеж из трех элементов — подстрока до разделителя, разделитель и подстрока после разделителя:

text = "Это был огромный, в два обхвата дуб, с обломанными ветвями и с обломанной корой" text_parts = text.partition("дуб") print(text_parts) # ('Это был огромный, в два обхвата ', 'дуб', ', с обломанными ветвями и с обломанной корой')

Если разделитель с строке не найден, то возвращается кортеж с одной строкой.

Соединение строк

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

words = ["Let", "me", "speak", "from", "my", "heart", "in", "English"] # разделитель - пробел sentence = " ".join(words) print(sentence) # Let me speak from my heart in English # разделитель - вертикальная черта sentence = " | ".join(words) print(sentence) # Let | me | speak | from | my | heart | in | English

Вместо списка в метод join можно передать простую строку, тогда разделитель будет вставляться между символами этой строки:

word = "hello" joined_word = "|".join(word) print(joined_word) # h|e|l|l|o

Содержит ли строка определенную подстроку

Помогите решить задачу. Требуется проверить, содержит ли строка определенную подстроку, она может располагаться через другие символы, главное буквы должны оставаться в том — же порядке. Например в строке «приветкакдела» есть подстрока «пика», но нет подстроки «тир». У меня получилось так, но на большинстве тестов заваливается.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
spisok = [] n = int(input()) for i in range(n): s = input() spisok.append(s) slovo = input() for j in spisok: x = list(slovo) c=0 y=0 for i in j: if i in x and str(x).find(i)>=y: y=str(x).find(i) x.remove(i) c+=1 if c==len(j): print("YES") else: print("NO")

ввод:
5
sleeep
drink
ink
ant
in
iwanttosleep

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Содержит ли строка (string) подстроку
Есть ли для этого встроенные методы, или надо писать свой костыль?

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

Автоматизируй это!

Эксперт Python

7537 / 4554 / 1205
Регистрация: 30.03.2015
Сообщений: 13,116
Записей в блоге: 29
Anastasiya552, вот тут регулярочка подойдет норм
Регистрация: 06.05.2020
Сообщений: 25
А если по-подробней, то как это сделать, просто не очень понимаю о чем вы
Автоматизируй это!

Эксперт Python

7537 / 4554 / 1205
Регистрация: 30.03.2015
Сообщений: 13,116
Записей в блоге: 29
Anastasiya552, реально, чего эт я, вот тут все расписано https://docs.python.org/3/libr. #module-re
Регистрация: 06.05.2020
Сообщений: 25

Эксперт Python

2885 / 1585 / 512
Регистрация: 21.02.2017
Сообщений: 4,205
Записей в блоге: 1
Welemir1,

print("YES" if re.search(r"\w*".join(input()), input()) else "NO")

DmFat, а я при чем? я все равно их не понимаю, девушка пусть смотрит и проверяет

Меню пользователя @ Welemir1
Читать блог

Welemir1, простите, ваше высочество что потревожил, случайно пинганув не того. Примите мои искрение извинения.

Меню пользователя @ Fudthhh
Читать блог

Автоматизируй это!

Эксперт Python

7537 / 4554 / 1205
Регистрация: 30.03.2015
Сообщений: 13,116
Записей в блоге: 29
DmFat, надо и импорт re в строку пихнуть, не заработает же у нее
Регистрация: 06.05.2020
Сообщений: 25
про импорт я додумалась, а так все работает, спасибо большое

Эксперт Python

2885 / 1585 / 512
Регистрация: 21.02.2017
Сообщений: 4,205
Записей в блоге: 1
Задача целиком:

1 2 3 4 5 6 7
import re words = [input() for _ in range(int(input()))] string = input() for word in words: print("YES" if re.search(r"\w*".join(word), string) else "NO")

Регистрация: 06.05.2020
Сообщений: 25
DmFat, Правда оно все равно не все тесты проходит, пишется, что превышено максимальное время работы
Автоматизируй это!

Эксперт Python

7537 / 4554 / 1205
Регистрация: 30.03.2015
Сообщений: 13,116
Записей в блоге: 29
Anastasiya552,
без регулярок

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
>>> n = int(input()) 5 >>> words = [input() for _ in range(n)] sleeep drink ink ant in >>> etalon = 'iwanttosleep' >>> for word in words: . if word in ''.join(e for e in etalon if e in word): . print('YES') . else: . print('NO') . NO NO NO YES YES

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18966 / 9661 / 2710
Регистрация: 21.10.2017
Сообщений: 21,465

ЦитатаСообщение от DmFat Посмотреть сообщение

r»\w*».join(word)
Зачет, интересный ход!
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

регулярное выражение кот. будет проверять содержит ли строка подстроку вида.
напишите плз с ходу регулярное выражение кот. будет проверять содержит ли строка подстроку вида.

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

Удалить определённую подстроку из строки
Подскажите , как сделать,чтобы из строки удалить заданную подстроку, но расположение этой подстроки.

Найти все строки содержащие определённую подстроку
У меня есть массив строк из файла и мне его надо обработать. Мне надо найти все строки содержащие.

Получить только файлы, не содержащие в имени определенную подстроку
Как получить имена файлов, которые не содержат в себе определенную подстроку? В папке много файлов.

Формирование файла из имеющихся в лог-файлах строк, содержащих определённую подстроку
Доброго дня, форумчане Помогите, пожалуйста, VBS не знаю совсем Задача следующая В папке лежит.

Строки

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

В Python нет символьного типа – типа данных, объектами которого являются одиночные символы. Однако язык позволяет рассматривать строки как объекты, состоящие из подстрок длинной в один и более символов. При этом, в отличие от списков, строки не принято относить к структурам данных. Видимо потому, что структуры данных состоят из более простых типов данных, а для строк в Python нет более простого (символьного) типа.

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

>>> s = "Hello, World!" >>> s[0] 'H' >>> s[7:] 'World!' >>> s[::2] 'Hlo ol!'

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

Важным отличием от списков является неизменяемость строк в Python. Нельзя перезаписать какой-то отдельный символ или срез в строке:

>>> s[-1] = '.' Traceback (most recent call last): File "", line 1, in TypeError: 'str' object does not support item assignment

Интерпретатор сообщает, что объект типа str не поддерживает присвоение элементам.

Если требуется изменить строку, то можно создать новую из срезов старой:

>>> s = s[0:-1] + '.' >>> s 'Hello, World.'

В примере берется срез из исходной строки, соединяется с другой строкой. Получается новая строка, которая присваивается переменной s . Ее старое значение при этом теряется.

Методы строк

В Python для строк есть множество методов. Посмотреть их можно по команде dir(str) , получить информацию по каждому – help(str.имя_метода) . Рассмотрим наиболее интересные из них.

Методы split() и join()

Метод split() позволяет разбить строку по пробелам. В результате получается список слов. Если пользователь вводит в одной строке ряд слов или чисел, каждое из которых должно в программе обрабатываться отдельно, то без split() не обойтись.

>>> s = input() red blue orange white >>> s 'red blue orange white' >>> sl = s.split() >>> sl ['red', 'blue', 'orange', 'white'] >>> s 'red blue orange white'

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

Метод split() может принимать необязательный аргумент-строку, указывающей по какому символу или подстроке следует выполнить разделение:

>>> s.split('e') ['r', 'd blu', ' orang', ' whit', ''] >>> '40030023'.split('00') ['4', '3', '23']

Метод строк join() выполняет обратное действие. Он формирует из списка строку. Поскольку это метод строки, то впереди ставится строка-разделитель, а в скобках — передается список:

>>> '-'.join(sl) 'red-blue-orange-white'

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

>>> ''.join(sl) 'redblueorangewhite'

Методы find() и replace()

Данные методы строк работают с подстроками. Методы find() ищет подстроку в строке и возвращает индекс первого элемента найденной подстроки. Если подстрока не найдена, то возвращает -1.

>>> s 'red blue orange white' >>> s.find('blue') 4 >>> s.find('green') -1

Поиск может производиться не во всей строке, а лишь на каком-то ее отрезке. В этом случае указывается первый и последний индексы отрезка. Если последний не указан, то ищется до конца строки:

>>> letters = 'ABCDACFDA' >>> letters.find('A', 3) 4 >>> letters.find('DA', 0, 6) 3

Здесь мы ищем с третьего индекса и до конца, а также с первого и до шестого. Обратите внимания, что метод find() возвращает только первое вхождение. Так выражение letters.find(‘A’, 3) последнюю букву ‘A’ не находит, так как ‘A’ ему уже встретилась под индексом 4.

Метод replace() заменяет одну подстроку на другую:

>>> letters.replace('DA', 'NET') 'ABCNETCFNET'

Исходная строка, конечно, не меняется:

>>> letters 'ABCDACFDA'

Так что если результат надо сохранить, то его надо присвоить переменной:

>>> new_letters = letters.replace('DA', 'NET') >>> new_letters 'ABCNETCFNET'

Метод format()

Строковый метод format() уже упоминался при рассмотрении вывода на экран с помощью функции print() :

>>> print("This is a . It's .".format("ball", "red")) This is a ball. It's red.

Однако к print() он никакого отношения не имеет, а применяется к строкам. Лишь потом заново сформированная строка передается в функцию вывода.

Возможности format() широкие, рассмотрим основные.

>>> s1 = "length - <>, width - <>, height - <>" >>> s1.format(3, 6, 2.3) 'length - 3, width - 6, height — 2.3'

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

>>> s2 = "height - , length - " >>> s2.format(3, 6) 'height - 6, length - 3'

Кроме того, аргументы могут передаваться по слову-ключу:

>>> info = "This is a . It's ." >>> info.format(subj="table", prop="small") "This is a table. It's small."

Пример форматирования вещественных чисел:

>>> " ".format(3.33333, 10/6) '1.67 3.333'

Практическая работа

  1. Вводится строка, включающая строчные и прописные буквы. Требуется вывести ту же строку в одном регистре, который зависит от того, каких букв больше. При равном количестве преобразовать в нижний регистр. Например, вводится строка «HeLLo World», она должна быть преобразована в «hello world», потому что в исходной строке малых букв больше. В коде используйте цикл for , строковые методы upper() (преобразование к верхнему регистру) и lower() (преобразование к нижнему регистру), а также методы isupper() и islower() , проверяющие регистр строки или символа.
  2. Строковый метод isdigit() проверяет, состоит ли строка только из цифр. Напишите программу, которая запрашивает с ввода два целых числа и выводит их сумму. В случае некорректного ввода программа не должна завершаться с ошибкой, а должна продолжать запрашивать числа. Обработчик исключений try-except использовать нельзя.

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Rukovodstvo

статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.

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

В этой статье мы рассмотрим четыре способа использования Python, чтобы проверить, содержит ли строка подстроку. У каждого есть свои варианты использования и плюсы / минусы, некоторые из которых мы кратко рассмотрим здесь: 1) Оператор in Самый простой способ проверить, содержит ли строка Python подстроку, — использовать оператор in. Оператор in используется для проверки структур данных на принадлежность к Python. Он возвращает логическое значение (True или False) и может использоваться следующим образом: fullstring = "StackAbuse" substring = "tack", если

Время чтения: 2 мин.

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

1) Оператор in

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

 fullstring = "StackAbuse" substring = "tack" if substring in fullstring: print "Found!" else: print "Not found!" 

Этот оператор является сокращением для вызова __contains__ объекта, а также хорошо работает для проверки наличия элемента в списке.

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

Тип String в Python имеет метод, называемый index который можно использовать для поиска начального индекса первого вхождения подстроки в строку. Если подстрока не найдена, ValueError исключение ValueError, которое можно обработать с помощью блока try-except-else:

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

Этот метод полезен, если вам нужно знать позицию подстроки, а не просто ее наличие в полной строке.

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

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

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

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

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

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

 from re import search fullstring = "StackAbuse" substring = "tack" if search(substring, fullstring): print "Found!" else: print "Not found!" 

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

об авторе

Эта статья была написана Якобом Стопаком, консультантом по программному обеспечению и разработчиком, стремящимся помочь другим улучшить свою жизнь с помощью кода. Джейкоб является создателем Initial Commit — сайта, посвященного тому, чтобы помочь любознательным разработчикам узнать, как написаны их любимые программы. Его избранный проект помогает людям изучать Git на уровне кода.

Licensed under CC BY-NC-SA 4.0

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

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