RegEx:配置字符串的匹配部分(按定义的区域)

时间:2016-01-12 11:09:16

标签: regex

我需要在密钥%CONFIG\n之后隔离一部分字符串。将删除以%开头的尾随换行符和其他区域。

我的示例字符串:

Configuration File

Format
<Identifier>: <init> <start> <end> <step>

%CONFIG
Line A: 0 1000 5000 300
Line B: 0 0 200 20



%OPTIONAL_OTHER_KEY

some other definitions

唯一的匹配应该是:

Line A: 0 1000 5000 300
Line B: 0 0 200 20

%OPTIONAL_OTHER_KEY之后的所有内容作为输入字符串的可选内容,并且不包含在匹配项中。

我已经(?<=%CONFIG\n)[\w\W]*(?=%),但它不会删除尾随的新行...

1 个答案:

答案 0 :(得分:1)

当您需要从匹配中省略一些空格时,之前之前的通用子模式应与惰性量词一起使用(如果其他方法不起作用),并且空白子模式必须与贪婪的量词一起使用(好吧,在某些语言中,你不应该混淆懒惰和贪婪的量词,就像在Tcl中一样,我希望不是这里的情况)。它可以快速实现,但如果出现任何性能问题,可能需要进行调整。

所以,你可以使用

(?<=%CONFIG\n)[\w\W]*?(?=\s*%)
                     ^   ^^^

请参阅regex demo

此处,[\w\W]*?*?懒惰量词匹配零个或多个任何字符,但尽可能少\s*匹配零个或多个空格字符,尽可能多地添加到前瞻,以便它不是匹配的一部分。

但是,如果%之后没有%CONFIG,则需要使用展开的懒惰量词版

(?<=%CONFIG\n)\S*(?:\s+[^\s%]\S*)*

请参阅the demo