以下是多行记录列表的示例,每个记录都以固定字符串标签(LABEL
)开头:
<Irrelevant line>
...
<Irrelevant line>
LABEL ...
...
...
LABEL ...
...
...
LABEL ...
...
...
LABEL ...
...
...
是否有一个Java正则表达式可以提供上述内容并提取每条记录,即
LABEL ...
...
...
此外,这是提取这些记录的最快方法,还是逐行读取并检查字符串的开头会产生更快的结果?
答案 0 :(得分:2)
我认为你可以从表达式开始:
^LABEL\s*\w*
OR
^LABEL.*
它可能需要一些改进,但你至少可以从它开始。
答案 1 :(得分:2)
要遍历所有LABEL
组,请使用以下命令:
Pattern regex = Pattern.compile("(?sm)LABEL.*?(?=^LABEL|\\Z)");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
// the current LABEL group: regexMatcher.group()
}
有关各种比赛,请参阅the demo。
<强>解释强>
(?s)
激活DOTALL
模式,允许点跨行匹配(?m)
启用了多行模式,允许^
和$
在每一行匹配LABEL
匹配文字字符.*?
懒惰地匹配所有字符...... (?=^LABEL|\\Z)
可以断言后面的内容是下一个LABEL
或字符串的结尾答案 2 :(得分:1)
答案 3 :(得分:1)
在我看来,您可以每行迭代一次流,并检查该行是否以&#34; LABEL&#34;开头。
我认为你可以使用&#34; substring&#34;像
这样的方法line.substring(0,"LABLEL".length());//you need add more checks to improve code security
在我看来,Regural Expressions对于找到没有特定文本的模式非常有用。