给出
之类的文字摘录Preface (optional, up to multiple lines)
Main : sequence1
sequence2
sequence3
sequence4
Epilogue (optional, up to multiple lines)
哪个Java
正则表达式可用于提取所有序列(例如上面的sequence1
,sequence2
,sequence3
,sequence4
?例如,Matcher.find()
循环?
每个"序列"前面有,也可能包含0个或多个空格(包括制表符)。
以下正则表达式
(?m).*Main(?:[ |t]+:(?:[ |t]+(\S+)[\r\n])+
仅产生第一个序列(sequence1
)。
答案 0 :(得分:3)
您可以使用以下regex:
(?m)(?:\G(?!\A)[^\S\r\n]+|^Main\s*:\s*)(\S+)\r?\n?
<强>详情:
(?m)
- (?:\G(?!\A)[^\S\r\n]+|^Main\s*:\s*)
- 两者中的任何一个:
\G(?!\A)[^\S\r\n]+
- 上一次成功匹配(\G(?!\A)
)结束,然后1 +个水平空格([^\S\r\n]+
)可以替换为[\p{Zs}\t]+
或[\s&&[^\r\n]]+
)|
- 或^Main\s*:\s*
- 开始一行,Main
,0 +空格,:
,0 +空格(\S+)
- 第1组捕获1个非空白符号\r?\n?
- 可选的CR和可选的LF。请参阅下面的Java代码:
String p = "(?m)(?:\\G(?!\\A)[^\\S\r\n]+|^Main\\s*:\\s*)(\\S+)\r?\n?";
String s = "Preface (optional, up to multiple lines)...\nMain : sequence1\n sequence2\n sequence3\n sequence4\nEpilogue (optional, up to multiple lines)";
Matcher m = Pattern.compile(p).matcher(s);
while(m.find()) {
System.out.println(m.group(1));
}