我试图做一个正则表达式,以便我可以在特定的Header之后获得文本。标头后各行的数字是随机的。 Header2和Header3的名称也是未知的。
事实是,我只需要捕获Header1之后的文本,因为在其他标头之后也有类似的文本,我们不应该捕获。
我正在尝试以下方法:
Header1\n(?:\s{4}(.+\:\s+.*)){1} //Captures --> a: fileAa2
Header1\n(?:\s{4}(.+\:\s+.*)){2} //Captures --> b: fileB-
Header1\n(?:\s{4}(.+\:\s+.*)){3} //Captures --> cb: fileCl
但是我必须手动更改花括号之间的数字...所以也许您可以帮助我找到更好的方法,文本如下:
Header1
ab: fileAa2
b: fileB-
cb: fileCl
ab: fileD'
b: fileFn
Header2
ab: fileAa2
a: .file2
ab: file3/a
a: file4
x: file5
Header3
LL
pkg
e
f
我要归档的目标是使用一个带有match或exec的正则表达式来创建如下数组:
[ab: fileAa2, b: fileB-, cb: fileCl, ab: fileD', b: fileFn]
之后,我将通过前缀过滤数据,如下所示:
[fileAa2, fileD']
[fileB-, fileFn]
[fileCl]
请欢迎任何建议
答案 0 :(得分:0)
您可以查看以下内容:Header1\n(((.+?:\s+.+?)\n)+)
(例如here)
给出以下文字:
Header1
ab: fileAa2
b: fileB-
cb: fileCl
ab: fileD'
b: fileFn
Header2
ab: fileAa2
a: .file2
ab: file3/a
a: file4
x: file5
Header3
LL
pkg
e
f
它应该匹配:
ab: fileAa2
b: fileB-
cb: fileCl
ab: fileD'
b: fileFn
表达式基本上会寻找Header1
之后的所有:对。具有标题的名称会破坏此模式,因此表达式将返回您想要的内容(丢弃其余内容)。
答案 1 :(得分:0)
使用此正则表达式(我想出了此方法,并使用了npinti的演示页进行了测试,谢谢)
Header1\n((\s.+\n)+\s.+[^\n])
您可以将Header1
或Header2
的{{1}}更改,它也将起作用。
此外,即使要匹配的行位于您要处理的末尾,即使没有最后的换行符,这也可以使用。
假定行要匹配
以空格(Header3
)开头
以换行符(\s.+
)结尾,
可能多次(\n
),
最后一行从空白(+
开始)
但结尾不是换行符(\s.+
)。
最后一位避免匹配到下一个标头(以字母开头而不是空白),并且如果它是目标标头的一部分,则获得最后一行。