Поиск одного совпадения – это search. Когда нужно не первое, а все, берут другую функцию.
re.findall(шаблон, строка)– возвращает список всех совпадений, найденных в строке слева направо. Не объектыMatch, а готовые куски текста.
| Что сравниваем | re.search |
re.findall |
|---|---|---|
| Сколько находит | первое совпадение | все совпадения |
| Что возвращает | объект Match |
список строк |
| Если совпадений нет | None |
пустой список [] |
| Как взять текст | m.group() |
элемент списка |
Разница в возврате не случайна. search рассказывает всё о одном совпадении: где оно стоит, из чего состоит. findall отвечает на другой вопрос – «что тут вообще есть», – и потому отдаёт только текст, без координат и без объектов.
import re
text = 'В корзине 12 яблок, 5 груш и 2026 вишен.'
print(re.findall(r'\d+', text)) # ['12', '5', '2026']
print(len(re.findall(r'\d+', text))) # 3 – столько чисел
print(re.findall(r'\d+', 'здесь чисел нет')) # []
# пустой список, а не None: совпадений не нашлось ни одного
Список удобно считать: len() даёт количество совпадений. Именно так в задаче про журнал и узнаётся, сколько строк подошло.