Можно ли использовать одно регулярное выражение для анализа пар ключ-значение в именованных группах захвата? - PullRequest
0 голосов
/ 23 января 2020

Мои данные выглядят так:

[ REPORT_PROFILE = Some text ] [ TIME_GENERATED = 1579734865 ] [ RECORD_NUMBER = 131757058 ]

Мои данные также могут содержать [ SOME_KEY = Some value].

Я хотел бы извлечь:

| Key            | Value      |
|----------------|------------|
| SOME_KEY       | Some value |
| REPORT_PROFILE | Some text  |
| TIME_GENERATED | 1579734865 |
| RECORD_NUMBER  | 131757058  |

I может сделать это, используя несколько регулярных выражений, например

\[\s+REPORT_PROFILE = (?<REPORT_PROFILE>[^\]]+)\s+\]

\[\s+\TIME_GENERATED = (?<TIME_GENERATED>[^\]]+)\s+\]

Но есть ли способ, которым я могу использовать одно регулярное выражение для извлечения произвольного числа групп совпадений , динамически называть их на основе имени ключа в исходном тексте?

Я использую Splunk, но это просто PCRE под капотом (не PCRE2, чтобы уточнить).

1 Ответ

0 голосов
/ 23 января 2020

((?:\[ [^\[\]]+ = [^\[\]]+ \])+)

Regex101 Разбивка

РЕДАКТИРОВАТЬ

Эта команда возвратит именованные группы для 3 известных ключей , Произвольный ключ не может быть назван, потому что это решение зависит от "положительного вида", который должен иметь фиксированную ширину.

((?:\[ [^\[\]]+ = ((?<=REPORT_PROFILE = )(?<REPORT_PROFILE>[^\[\]]+)|(?<=TIME_GENERATED = )(?<TIME_GENERATED>[^\[\]]+)|(?<=RECORD_NUMBER = )(?<RECORD_NUMBER>[^\[\]]+)|([^\[\]]+) ]))+)

Regex101 / 2 Breakdown

...