У меня есть файл, который выглядит следующим образом:Multiline регулярное выражение соответствие
useless stuff
fruit: apple
fruit: banana
useless stuff
fruit: kiwi
fruit: orange
fruit: pear
useless stuff
Идея заключается в том, чтобы поймать все имена фруктов, в том порядке, в котором они появляются, так и группами. В примере выше, выход должен быть что-то вроде:
[['apple', 'banana'], ['kiwi', 'orange', 'pear']]
Я преуспеваем делает это путем перебора всех матчей за многострочного регулярное выражение '^fruit: (.+)$'
, и путем добавления названия фруктов одному и тому же данный список, если оказывается, что линии, где они были найдены, следуют друг за другом.
Однако это нецелесообразно для замещений на именах фруктов (отслеживание начального и конечного индексов совпадений становится обязательным), поэтому я бы предпочел сделать это в одном регулярном выражении.
Я попытался это:
re.findall(r'(?:^fruit: (.+)$\n)+', thetext, re.M)
Но это только возвращает одну строку.
Где я ошибаюсь?
вам абсолютно необходимо сделать это с помощью регулярных выражений делать? – jamylak
@jamylak: Я думаю, что это станет очень болезненным без регулярного выражения, а совпадающие шаблоны в реальном случае довольно сложны. – michaelmeyer
Что это за линия, которую она находит? – allyourcode