我需要在密钥%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]*(?=%)
,但它不会删除尾随的新行...
答案 0 :(得分:1)
当您需要从匹配中省略一些空格时,之前之前的通用子模式应与惰性量词一起使用(如果其他方法不起作用),并且空白子模式必须与贪婪的量词一起使用(好吧,在某些语言中,你不应该混淆懒惰和贪婪的量词,就像在Tcl中一样,我希望不是这里的情况)。它可以快速实现,但如果出现任何性能问题,可能需要进行调整。
所以,你可以使用
(?<=%CONFIG\n)[\w\W]*?(?=\s*%)
^ ^^^
请参阅regex demo
此处,[\w\W]*?
与*?
懒惰量词匹配零个或多个任何字符,但尽可能少。 \s*
匹配零个或多个空格字符,尽可能多地添加到前瞻,以便它不是匹配的一部分。
但是,如果%
之后没有%CONFIG
,则需要使用展开的懒惰量词版。
(?<=%CONFIG\n)\S*(?:\s+[^\s%]\S*)*
请参阅the demo