Python для новичковСтроки, модули и файлыПоиск и форматирование строк

Поиск и форматирование строк

Уроки курсаПоиск и форматирование строк

В прошлом уроке мы разобрали методы, которые преобразуют строку: strip() убирал пробелы, replace() менял символы, split() и join() разбивали и собирали текст. Все эти методы что-то делали со строкой и возвращали новую. Сегодня добавляем другой класс методов — те, что не меняют строку, а ищут в ней информацию и возвращают либо позицию, либо количество, либо булево значение. Начнём с find().

Поиск подстроки: метод find() и ловушка с -1

Метод find() отвечает на вопрос: «С какой позиции начинается эта подстрока в строке?». Он возвращает индекс первого символа первого вхождения — или -1, если подстрока не найдена.

text = 'hello world'

print(text.find('world'))  # 6
print(text.find('ll'))     # 2
print(text.find('xyz'))    # -1

Индекс 6 означает, что слово 'world' начинается на шестой позиции строки (считая с нуля). Если подстрока встречается несколько раз, find() возвращает позицию только первого вхождения.

Важная деталь: find() в отличие от index() никогда не бросает исключение. Если подстрока не найдена — просто вернёт -1. Это удобно, но тут же прячется ловушка.

Ловушка: проверять результат надо явно

Когда хочется узнать, есть ли подстрока в строке, интуитивно пишут так:

text = 'python is great'

if text.find('python'):
    print('Нашли!')

Этот код работает неправильно. find('python') вернул 0 — подстрока 'python' стоит в самом начале строки, на нулевой позиции. Но 0 в Python — ложное значение, и условие if 0 не выполнится. Программа не выведет 'Нашли!', хотя подстрока есть.

Правильная проверка — явное сравнение с -1:

text = 'python is great'

if text.find('python') != -1:
    print('Нашли!')

Теперь логика корректна: мы проверяем не «правдивость» числа, а конкретно «не равно минус одному».

Альтернативно для простой проверки наличия подстроки можно использовать оператор in:

if 'python' in text:
    print('Нашли!')

in читается проще и не создаёт путаницы с нулевым индексом. Но find() незаменим, когда нужна именно позиция — например, чтобы вырезать часть строки или проверить, где именно встречается слово.