Получить контент с RegEx между фигурными скобками и ключевым словом - PullRequest
2 голосов
/ 19 февраля 2020

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

(?<=(?:\testlist\b)|(?:){)((.*?)(?=}))

Весь сам контент может содержать много блоков (которые всегда начинается с ключевого слова), например:

nodelist{
...
...
}
testlist
{
...
...
}

С помощью приведенного выше шаблона я могу получить каждое содержимое узла, но я хотел бы указать в регулярном выражении, что только содержимое узла 'testlist' должно захватываться. (Положение фигурных скобок отличается по дизайну, потому что я хотел бы получить содержимое, даже если фигурные скобки находятся в той же строке, что и ключевое слово, или независимо от того, сколько разрывов строк содержится после него)

Кто-нибудь знает Как мне этого добиться?

Спасибо!

1 Ответ

3 голосов
/ 19 февраля 2020

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

(?s)testlist\s*{(.*?)}

Это соответствует буквально testlist, за которым следуют пробелы и буквальная открывающая скобка. (.*?) захватывает все до следующей закрывающей скобки.

Использование:

PS C:\Users\greg> 'nodelist{
>> ...
>> ...
>> }
>> testlist
>> {
>> ...
>> ...
>> }' -match '(?s)testlist\s*{(.*?)}'
True
PS C:\Users\greg> $Matches.0
testlist
{
...
...
}
PS C:\Users\greg> $Matches.1

...
...

PS C:\Users\greg>   

Если вы хотите полное совпадение вместо группы захвата:

PS C:\Users\greg> 'nodelist{
>> ...
>> ...
>> }
>> testlist
>> {
>> ...
>> ...
>> }' -match '(?s)(?<=testlist\s*{).*?(?=})'
True
PS C:\Users\greg> $Matches.0

...
...

PS C:\Users\greg>   
...