Рассмотрим следующую многострочную строку:
This is multiline text that needs to be correctly parsed into key-value pairs, excluding all other information.
Section One:
First key = Value One
Second key = Value Two
Section Two:
Third key = Value Three
Fourth key = Value Four
Fifth key = Value Five
Section Three:
Sixth key = Value Six
Seventh key = Value Seven
Eighth key = Value Eight
Другими словами, текст состоит из «введения» (несколько фраз), за которыми следуют несколько строк, организованных в разделы, каждый из которых имеет «заголовок» (например, Section One
) и несколько пар ключ-значение, разделенных =
. .
Ключи могут содержать любой символ, кроме новой строки и =
, а значения могут содержать любой символ, кроме новой строки.
Иногда в тексте могут появляться другие нерелевантные строки.
Необходимо регулярное выражение, которое заставит matched.find()
возвращать все группы пар ключ-значение и только те, пропуская как введение, так и заголовки разделов, а также любую другую строку, в которой нет пары ключ-значение.
В идеале не требуется никакой другой предварительной или последующей обработки текста.
Чтение текста построчно и соответствующая обработка в этом случае невозможны.
Такие шаблоны, как (?:\r|\n)(\s*[^=\.]+)\s*=\s*(.+)
, близки, но они все еще включают в себя немного больше требований.
Любые идеи?
(?m)(?<=^ {4}).+?(?= *= *(.*))
- person Jonny 5   schedule 12.02.2015