Java正则表达式匹配以固定标签开头的多行记录

时间:2014-07-07 07:55:43

标签: java regex multiline records

以下是多行记录列表的示例,每个记录都以固定字符串标签(LABEL)开头:

<Irrelevant line>
...
<Irrelevant line>
LABEL ...
...
...
LABEL ...
...
...
LABEL ...
...
...
LABEL ...
...
...

是否有一个Java正则表达式可以提供上述内容并提取每条记录,即

LABEL ...
...
...

此外,这是提取这些记录的最快方法,还是逐行读取并检查字符串的开头会产生更快的结果?

4 个答案:

答案 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)

以下内容将匹配以字符串LABEL开头的所有行,

(?=^LABEL).*

DEMO

答案 3 :(得分:1)

在我看来,您可以每行迭代一次流,并检查该行是否以&#34; LABEL&#34;开头。

我认为你可以使用&#34; substring&#34;像

这样的方法
line.substring(0,"LABLEL".length());//you need add more checks to improve code security

在我看来,Regural Expressions对于找到没有特定文本的模式非常有用。