Regex для выбора целых разделов на основе текста в разделе - PullRequest
0 голосов
/ 13 марта 2019

У меня есть следующий текст с несколькими повторяющимися разделами с разными значениями:

Section
-------
Property1: Val-a
Property2: 

 <dict>
 <key>key</key>
 <data>my data</data> 
 </dict>

Property3: Val-123

Section
-------
Property1: Val-c
Property2: Val-d
Property3: Val-4

Section
-------
Property1: Val-e
Property2: Val-f
Property3: Val-f

Section
-------
Property1: Val-gg
Property2: Val-d
Property3: Val-h

Section
-------
Property1: Val-x 
Property2: Val-f
Property3: Val-9

Я хотел бы получить все разделы, которые имеют свойство 2: Val-d. Я хотел бы получить весь раздел со всеми свойствами и значениями. В приведенном выше примере я хотел бы закончить второй и четвертый раздел:

Section
-------
Property1: Val-c
Property2: Val-d
Property3: Val-4

и

Section
-------
Property1: Val-gg
Property2: Val-d
Property3: Val-h

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вы можете использовать это регулярное выражение в режиме MULTILINE:

(?m)^Section(?:\n[^\n]+)+?\nProperty2: Val-d(?:\n[^\n]+)*

RegEx Demo

1 голос
/ 13 марта 2019

Может быть дополнительно оптимизировано:

^Section
(?:(?!^Section)[\s\S])+?
^Property2:\ Val-d
(?:(?!^Section)[\s\S])+?
(?=^Section|\Z)

См. демо на regex101.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...