在大括号和关键字之间使用 RegEx 获取内容

Get content with RegEx between braces and a keyword

我遇到了一个问题,我无法解决。 我试图建立我的正则表达式模式,它必须获取大括号之间的内容,但如果在左大括号之前只有一个确切的关​​键字。

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

整个内容本身可能包含许多块(总是以关键字开头),例如:

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

使用上面的模式我可以获得每个节点的内容,但我想在正则表达式中指定只有 'testlist' 节点的内容必须被抓取。 (大括号的位置因设计而异,因为我想获取内容,即使大括号与关键字在同一行,也不管它后面包含多少换行符)

有没有人知道我该如何实现?

谢谢!

您可以使用像

这样的正则表达式
(?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>