
В языке Python поиск слова в строке чаще всего выполняется с помощью методов in, find(), index(), а также регулярных выражений из модуля re. Каждый из этих подходов имеет свои особенности и применяется в зависимости от контекста задачи: требуется ли точное совпадение, чувствительность к регистру, поиск по шаблону или необходимость узнать позицию найденного фрагмента.
Оператор in позволяет быстро проверить наличие подстроки: 'word' in text возвращает True, если слово присутствует. Метод find() возвращает индекс первого вхождения или -1, если совпадение не найдено. index() ведёт себя аналогично, но вызывает исключение ValueError при отсутствии результата.
Регулярные выражения подходят для более гибких условий: поиск слова с учётом границ (r'\bword\b'), учёт регистра (re.search(pattern, text)), поиск с игнорированием регистра (re.search(pattern, text, re.IGNORECASE)), множественные совпадения (re.findall()). Применение флага re.UNICODE необходимо для корректной работы с кириллицей в Python 3, если шаблон использует границы слова \b.
Если требуется исключить частичные совпадения (например, чтобы 'cat' не находился в 'catalog'), используйте шаблон с границами слова: r'\bcat\b'. При необходимости заранее очистить строку от пунктуации и привести к единому регистру, удобно использовать модуль re совместно с методами lower() и sub().
Проверка наличия слова с помощью оператора in
Оператор in – самый быстрый способ определить, содержится ли подстрока в строке. Он возвращает True, если вхождение найдено, иначе False.
text = "Python поддерживает поиск слов"
"поиск" in text # True
"Поиск" in text # False (регистр имеет значение)
- Сравнение чувствительно к регистру. Для игнорирования регистра используйте
lower()илиcasefold().
word = "ПоИск"
word.lower() in text.lower() # True
inработает по принципу поиска подстроки. Он не отличает отдельные слова от частей других слов.
"иск" in text # True, хотя это не отдельное слово
Чтобы избежать ложных совпадений, используйте разделение строки по пробелам:
word = "поиск"
word in text.split() # True
- Этот подход не подходит для строк с пунктуацией. Для надёжной проверки – регулярные выражения или токенизация.
Регистрозависимый и регистронезависимый поиск
По умолчанию строковые методы Python, такие как in, str.find(), str.index() и str.count(), выполняют регистрозависимый поиск. Это означает, что подстрока «test» не совпадает с «Test».
Для регистронезависимого поиска необходимо привести обе строки к одному регистру с помощью str.lower() или str.upper(). Пример:
substring = "test"
text = "This is a Test string"
if substring.lower() in text.lower():
print("Найдено")
Если требуется позиция вхождения, используйте:
index = text.lower().find(substring.lower())
if index != -1:
print(f"Найдено на позиции {index}")
Для регулярных выражений применяют флаг re.IGNORECASE:
import re
pattern = "test"
text = "Another Test line"
if re.search(pattern, text, re.IGNORECASE):
print("Совпадение найдено")
При работе с Unicode-строками str.casefold() предпочтительнее str.lower(), особенно если поддержка языков с нестандартными правилами приведения к нижнему регистру критична:
if substring.casefold() in text.casefold():
print("Найдено с учётом Unicode")
Поиск слова по шаблону с использованием модуля re
Модуль re позволяет выполнять поиск слов в строке по регулярному выражению. Для нахождения слов используется функция re.findall(), которая возвращает все совпадения в виде списка.
Пример: поиск всех слов, начинающихся с заглавной буквы:
import re
text = "Москва и Санкт-Петербург – крупнейшие города России."
pattern = r'\b[А-ЯЁ][а-яё]+\b'
matches = re.findall(pattern, text)
print(matches) # ['Москва', 'Санкт', 'Петербург', 'России']
Шаблон \b[А-ЯЁ][а-яё]+\b означает: граница слова, первая буква – заглавная, остальные – строчные. Для поддержки кириллицы желательно использовать флаг re.UNICODE, но в современных версиях Python он включён по умолчанию.
Если требуется искать слово, независимо от регистра, используется re.IGNORECASE:
pattern = r'\bроссии\b'
re.findall(pattern, text, re.IGNORECASE) # ['России']
Чтобы избежать частичных совпадений (например, «дом» в «домой»), нужно использовать границы слова \b:
re.findall(r'\bдом\b', 'Дом стоит рядом с домом') # ['дом']
Если важно найти слово в начале строки, используется re.match(), а для первого вхождения – re.search():
re.match(r'\bДом\b', 'Дом у дороги') # найдено
re.search(r'\bдороги\b', 'Дом у дороги') # найдено
Для проверки наличия слова без извлечения подойдёт re.search() с условием:
if re.search(r'\bгород\b', text):
print("Слово найдено")
Регулярные выражения чувствительны к пробелам, знакам препинания и регистру, поэтому шаблон должен быть точным и учитывать структуру обрабатываемого текста.
Нахождение всех вхождений слова в строке
Для получения списка всех вхождений слова в строку можно использовать несколько подходов. Один из наиболее точных – применение регулярных выражений.
- Регулярное выражение:
re.finditer()возвращает итератор всех неперекрывающихся вхождений. Подходит, если требуется узнать позиции каждого совпадения.
import re
text = "слово и ещё раз слово"
pattern = r"\bслово\b"
matches = [match.start() for match in re.finditer(pattern, text)]
print(matches) # [0, 17]
- Поиск сдвигом: метод
str.find()позволяет реализовать поиск вручную, сдвигая индекс после каждого найденного совпадения.
text = "слово и ещё раз слово"
word = "слово"
positions = []
index = 0
while True:
index = text.find(word, index)
if index == -1:
break
positions.append(index)
index += len(word)
print(positions) # [0, 17]
- Разбиение и подсчёт: если нужны только количества, можно использовать
str.count(). Этот метод не даёт позиций, но быстрее.
text = "слово и ещё раз слово"
count = text.count("слово")
print(count) # 2
Если нужно учитывать только отдельные слова, а не подстроки внутри других слов, следует использовать границы слов \b в регулярных выражениях или предварительно разбивать строку на слова с помощью str.split().
Получение позиции первого вхождения слова

Для определения позиции первого появления слова в строке используется метод find(). Он возвращает индекс начала первого совпадения или -1, если слово не найдено. Индексация начинается с нуля.
text = "пример строки с нужным словом"
position = text.find("нужным")
print(position) # 15
Если нужно выполнить поиск с учётом регистра, find() подходит. Для поиска без учёта регистра предварительно преобразуйте обе строки к одному регистру:
text = "Пример строки с Нужным словом"
position = text.lower().find("нужным".lower())
print(position) # 16
Чтобы убедиться, что найдено именно отдельное слово, а не часть другого, используйте регулярные выражения:
import re
text = "пример строки с нужным словом"
match = re.search(r'\bнужным\b', text)
position = match.start() if match else -1
print(position) # 15
Метод index() аналогичен find(), но при отсутствии совпадения вызывает ValueError. Используйте его, если отсутствие слова – ошибка, которую нужно обработать явно.
try:
position = text.index("нужным")
except ValueError:
position = -1
print(position)
Обработка отсутствия слова без ошибок

При поиске слова в строке важно предусмотреть возможность его отсутствия. Это позволяет избежать ошибок, которые могут возникнуть при попытке доступа к несуществующему элементу. Один из распространённых методов – использование метода find(). Если слово не найдено, метод возвращает -1, что позволяет корректно обрабатывать такие случаи.
Пример простого кода:
text = "Пример строки"
word = "слово"
position = text.find(word)
if position == -1:
print("Слово не найдено")
else:
print(f"Слово найдено на позиции {position}")
Другой способ – использование оператора in, который возвращает True или False, в зависимости от того, содержится ли искомое слово в строке:
if word in text:
print("Слово найдено")
else:
print("Слово не найдено")
Использование метода index() также эффективно, однако в отличие от find(), он генерирует ошибку, если слово не найдено. Для безопасного использования этого метода можно обернуть его в блок try-except:
try:
position = text.index(word)
print(f"Слово найдено на позиции {position}")
except ValueError:
print("Слово не найдено")
Важным аспектом является выбор метода в зависимости от контекста. Если требуется просто узнать о наличии слова, лучше использовать in, так как он более прост и не вызывает исключений. Для получения позиции в строке удобно использовать find(), так как он возвращает -1 вместо ошибки. В случаях, когда важно работать с исключениями, можно воспользоваться index().
Поиск слова в многострочном тексте
В Python для работы с многострочными текстами можно использовать метод find() или регулярные выражения через модуль re. Однако, при поиске в многострочных строках стоит учитывать особенности работы с символами новой строки (\n), которые разделяют строки.
Чтобы найти слово в многострочном тексте с помощью метода find(), необходимо сначала объединить строки в один текст или перебирать их поочередно. Например:
text = """Это пример текста,
где нужно найти слово.
Текст разделен на несколько строк."""
word = "слово"
for line in text.split('\n'):
if word in line:
print("Слово найдено в строке:", line)
Этот способ позволяет искать слово в каждой строке отдельно, но может быть неэффективным для больших текстов.
Для более гибкого поиска стоит использовать регулярные выражения. Модуль re позволяет искать слова по шаблонам, что дает больше возможностей для настройки поиска. Пример поиска слова в многострочном тексте с использованием регулярных выражений:
import re
text = """Это пример текста,
где нужно найти слово.
Текст разделен на несколько строк."""
word = "слово"
matches = re.finditer(word, text)
for match in matches:
print(f"Слово найдено на позиции {match.start()}")
Этот метод позволяет искать слово в любом месте текста, включая начало, середину и конец каждой строки. Можно также использовать флаги, такие как re.MULTILINE, чтобы учитывать начало строки при поиске.
Для более сложных задач, таких как поиск нескольких слов или учет регистра, регулярные выражения предоставляют дополнительные инструменты. Например, чтобы игнорировать регистр, можно использовать флаг re.IGNORECASE:
matches = re.finditer(word, text, re.IGNORECASE)
Такой подход значительно ускоряет и упрощает процесс поиска в большом многострочном тексте, особенно если нужно учитывать различные варианты написания слов.
