В программе, которую я пишу, я использую Python re.search()
чтобы найти совпадения в блоке текста и распечатать результаты. Однако программа завершает работу, как только находит первое совпадение в блоке текста.
Как мне сделать это несколько раз, когда программа не останавливается, пока ВСЕ совпадения не будут найдены? Есть ли отдельная функция для этого?
Ответы:
Используйте
re.findall
илиre.finditer
вместо.re.findall(pattern, string)
возвращает список совпадающих строк.re.finditer(pattern, string)
возвращает итератор надMatchObject
объектами.Пример:
источник
finditer
было то, что я искал. Я удивлен, что один возвращает объекты Match, а другой - строки. Я ожидал использовать функциюmatch_all
илиmatch_iter
.re.search
в цикле. Это вернетMatch
объект. Вы захотите передать вMatch.start() + 1
качествеpos
аргумента дляre.search
следующей итерации цикла.findall
будет возвращен список совпадающих кортежей, а не список совпадающих строк.