Поиск слова в строке Python: использование if-условия
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы определить, содержит ли строка определенное слово, используйте оператор in
. Это просто и эффективно:
word = 'точно'
phrase = 'Найдите точное слово в фразе.'
found = word in phrase
print(found) # Вернёт: True. Это ваш ответ.
Для точного совпадения исключите слова, которые являются частью других, разделите фразу на отдельные слова.
Разделение на слова и поиск полностью совпадающих слов
Если вам нужно найти целое слово, чтобы не брать в расчет частичные совпадения:
words = phrase.split() # Проводим разделение фразы на отдельные слова.
found = word in words # Ищем полное совпадение слова среди полученных.
print(found) # Вернёт True, если слово 'точно' присутствует в фразе в качестве самостоятельного слова.
Регулярные выражения, учитывающие границы слов
Для поиска слов с учётом их границ применяйте следующий синтаксис:
import re
pattern = re.compile(r'\b{}\b'.format(word)) # Определены границы слова, нет пересечений!
found = bool(pattern.search(phrase))
print(found) # Вернёт True только в том случае, если 'точно' присутствует в фразе как самостоятельное слово.
Продвинутые методы поиска слов в строках
Точный поиск слов с использованием регулярных выражений
Если нужны более гибкие параметры для поиска полных слов, используйте границы в регулярных выражениях:
import re
found = bool(re.search(r'\b{}\b'.format(re.escape(word)), phrase)) # Учёт границ слов!
print(found) # Вернёт: True. Успех! Слово 'точно' обнаружено в фразе.
Поиск без учёта регистра
Игнорирование регистра букв в словах позволяет вам найти совпадение, несмотря на разный регистр, включив модификаторы в шаблоны регулярных выражений:
found = bool(re.search(r'\b{}\b'.format(re.escape(word)), phrase, re.IGNORECASE)) # Регистр не влияет на результат поиска!
print(found) # Вернёт True для всех форм слова 'точно', будь то 'точно', 'ТОЧНО' или 'тОчНо'.
Компилирование регулярного выражения для увеличения скорости поиска
Оптимизируйте скорость поиска с использованием предварительно скомпилированных регулярных выражений для часто выполняемых операций:
pattern = re.compile(r'\b{}\b'.format(re.escape(word)), re.IGNORECASE)
found = bool(pattern.search(phrase)) # Поиск выполнился быстро, правда же?
Контекст имеет значение!
Обратите внимание, что оператор in
ищет вхождения в любой части строки:
# Может быть случайное совпадение
password = 'суперсекрет'
found = 'секрет' in password # Секрет разгадан! Возвращает True
Динамическое создание шаблонов с помощью f-строк
В Python 3.6 и выше возможно использование f-строк для гибкого формирования шаблонов:
pattern = re.compile(rf'\b{word}\b') # 'word' напрямую в f-строке, удобно, не так ли?
found = bool(pattern.search(phrase))
Визуализация
Визуализируйте библиотеку (📚), где каждая книга — это отдельная строка в Python:
В нашей библиотеке можно найти:
- 📖 Руководство по Python
- 📘 Сборник рецептов кода
- 📗 Основы программирования
Ищем слово 'функция':
'функция' in 'Руководство по Python' # 🕵️♂️: "Содержит ли эта книга слово 'функция'?"
Наглядно отобразим результаты поиска:
📖: ❌ (Не обнаружено)
📘: ✅ (Нашлось слово "функция"!)
📗: ❌ (Требуемого слова не обнаружено)
Мы исследовали библиотеку и выяснили, в какой книге содержится нужное нам слово!
Менее популярные методы Python
У вас есть опыт использования функции str.find()
? Это еще один метод для поиска слов:
index = phrase.find(word)
found = index >= 0
print(found) # Вернёт True, если слово 'точно' помимо всего прочего обнаружено в фразе.
Однако учтите: str.find()
может быть медленнее, чем in
или регулярные выражения, если дело касается проверки наличия слов в тексте.
Особенности методов работы со строками
Метод str.count()
также может пригодиться, но не забывайте о следующем:
count = phrase.count(word)
print(count > 0) # Вернёт True, если слово 'точно' встречается в фразе хотя бы один раз.
Как и с in
, метод str.count()
засчитывает вхождения слова в качестве части других слов, например, 'точности'.
Когда "точное" совпадение — не ваша итоговая цель
Иногда частичное совпадение — это именно то, что вам нужно:
if 'акт' in phrase:
print('Обнаружено частичное совпадение!') # 'акт' найдено в слове 'точно'
Используйте это обдуманно, избегая случайных широких совпадений.
Полезные материалы
- Встроенные типы — Документация Python 3.12.2 — освежите в памяти все методы работы со строками.
- Проверка наличия слова в строке в Python – Stack Overflow — изучите опыт сообщества разработчиков.
- re — Операции с регулярными выражениями — Документация Python 3.12.2 — поймите суть использования регулярных выражений.
- Учебник по регулярным выражениям — \b Границы слов — понимайте, как формируются границы слов в контексте регулярных выражений.
- Метод find() строк в Python – Tutorialspoint — подробно изучите работу метода
find()
. - Метод count() строк в Python – W3Schools — начните эффективно использовать метод
count()
.