在大括号和关键字之间使用 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>
我遇到了一个问题,我无法解决。 我试图建立我的正则表达式模式,它必须获取大括号之间的内容,但如果在左大括号之前只有一个确切的关键字。
(?<=(?:\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>