Проверить наличие текста в строке
В коде ниже показаны два способа проверить наличие текста в строке:
text = "Python" # строка для поиска # 1-ый способ if "Python" in text: print("OK") # 2-ой способ — возвращает позицию в тексте text.find("th") # 2 # если указанный текст не обнаружен, метод find вернёт -1
Регулярные выражения
Проверить наличие текста в строке через регулярные выражения можно через библиотеку re.
# Проверить наличие текста в строке через рег. выражения import re pattern = re.compile("(Python|Django)") if pattern.search(text): print("OK")
Узнать, по какому совпадению была найдена строка можно через метод group() .
import re pattern = re.compile("(Python|Django)") match = pattern.search(text) match.group() # возвращает первое совпадение — Python
Начало и конец строки
Можно проверить совпадение строки в начале и в конце текста через функции startswith() и endswith() .
text = "Python" # Проверить, что строка начинается с заданной текстом if text.startswith("Critical error"): print("true") # Проверить, что строка заканчивается с заданной текстом if text.endswith("on"): print("true")
Обновлено: 01 ноября 2020
Комментарии
Авторизуйтесь, чтобы добавлять комментарии
Как проверить наличие подстроки в строке python
Чтобы проверить, есть ли подстрока в строке можно использовать оператор in . Взгляните на пример ниже:
phrase = 'I Love Hexlet!' word = 'Hexlet' if word in phrase: print('Hi!')
На экран будет выведено ‘Hi!’ .
Нахождение строк, соответствующих шаблону
Если в регулярном выражениии используются специальные значения с \ , то лучше использовать синтаксис для «сырых» (raw) строк. Приведем простой пример использования «сырых» строк: предположим, что нужно написать строку, которая бы содержала два подряд идущих символа: \ и n . Мы уже знаем, что если просто написать ‘\n’ , то Python превратит это сочетание в символ переноса строки. Однако, если написать r’\n’ , то Python не будет производить никаких преобразований внутри этой строки.
Проверим, есть ли числа в строке:
if re.search(r'\d', 'Я родился 30 февраля 1930 года'): print(True)
Часто нам не просто нужно узнать, находится ли что-то нас интересующее в строке, но и узнать, что именно нашлось. Но функция re.search возвращает не совсем то, чего бы нам хотелось:
>>> s = 'abc' >>> r = re.search('a', s) >>> r _sre.SRE_Match object; span=(0, 1), match='a'>
Это такой объект, а нам хотелось бы саму найденную строку.
Чтобы получить найденную строку, существует метод group() :
first_match = re.search('кот.', 'Кот пришёл к коту и спросил кота: «Бойкот, котелок или скотч?»') if first_match: first_match.group() # 'кот ' else: print('Nothing found.')
Если нужно найти в строке несколько подстрок, то каждую из них можно выделить с помощью круглых скобок.
>>> s = 'корова молоко' >>> r = re.search('(.+?оро.+?) (.+?оло.+)', s) >>> r _sre.SRE_Match object; span=(0, 12), match='корова молоко'> >>> r.group(1) 'корова' >>> r.group(2) 'молоко'
Ограничение жадности
Если мы хотим выделить в шаблоне только часть строки и сделать её запоминающей группой, то у нас возможны случаи двойного толкования шаблона, как в примере выше:
>>> s = 'корова молоко' >>> r = re.search('(.+?оро.+?) (.+?оло.+)', s)
В строке ‘корова молоко’ мы хотим выделить всё слово, содержащее оро до пробела после него. Поэтому в шаблоне мы пишем после слова “ограничитель” в виде пробела, подразумевая, что парсер регулярных выражений “дойдёт” до этого пробела и остановится. Но . означает любой символ, в том числе и пробел. Как будет трактоваться такое выражение? Будет ли пробел “захватываться” группой?
По умолчанию квантификаторы (прежде всего, + и * ) жадные (greedy). Это значит, что они стремятся “съесть” как можно больше символов, подходящих под шаблон. Если мы ожидаем, что в строке ‘Онегин, добрый мой приятель’ такой шаблон ‘^.+ ‘ (справа от квантификатора ограничитель в виде пробела) захватит только первое слово “Онегин”, то мы ошибаемся:
>>> s = 'Онегин, добрый мой приятель' >>> r = re.search('^.+ ', s) >>> print(r.group()) Онегин, добрый мой
Ограничитель действует, но только это не первый, а последний пробел в строке, после “мой” перед “приятель”, а не после “Онегина”, как мы хотели.
Чтобы этот шаблон работал как нужно, необходимо ограничить жадность квантификатора. Это делается с подстановкой после него символа ? . Таким образом, чтобы квантификатор был нежадным, его следует записать так: .+? . Проверим:
>>> s = 'Онегин, добрый мой приятель' >>> r = re.search('^.+? ', s) >>> print(r.group()) Онегин,
Строки в Python
В Python строка — это последовательность символов. Вот примеры:
name = 'Tyler' greetings = "Hi! I am Tyler" bio = """Name: Tyler weight: 70 kg height: 180 cm """
Tyler — это строковый литерал. Строковые литералы создают строку и помещают её в память. name — это имя строки, находящейся в памяти. У одной и той же строки может быть несколько имён: his_name = name .
Строковые литералы могут использовать и двойные кавычки, особенно если внутри них есть одинарная: Hi! I am Tyler .
Наконец, строки в Python могут содержать несколько строк текста. Всё потому, что перенос строки — это обычный символ. Запустите у себя и понаблюдайте за поведением следующих фрагментов кода:
print('1\n2') print("""1 2""")
Записать строку в несколько строк текста можно с помощью трёх двойных кавычек.
Как получить строку из числа
Строку можно получить двумя способами:
- Задать с помощью строкового литерала, как в примерах выше
- Получить из переменной другого типа
Если нам к числу нужно отнестись, как к строке, его можно преобразовать с помощью str :
a = 42 b = str(a) # то же самое, что и b = str(42) или b = '42' print(type(a)) # Выведет: print(type(b)) # Выведет: print('a * 2 = ', a * 2) # Выведет: a * 2 = 84 print('b * 2 = ', b * 2) # Выведет: b * 2 = 4242
Как получить длину строки
Длину строки получить нетрудно:
print(len('Hello world')) # Выведет: 11
Важно только помнить, что при подсчёте длины учитываются все символы, в том числе перенос строки:
print(len("""Hello world """)) # Выведет: 12
Что можно делать со строками
Над строками можно осуществлять:
- арифметические операции
- подстановку переменных
- много других полезных вещей
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
