RegEx在Java中标记之间提取文本

时间:2016-10-21 06:54:32

标签: java regex

我需要使用RegEx在以下文本文件中提取:70:之后的值。值也可能包含换行符。

我目前的解决方案是在:70::之间提取字符串,但这始终只返回一个匹配项,即第一个:70:和最后一个:之间的整个文本。

:32B:xxx,
:59:yyy
something
:70:ACK1
ACK2
:21:something
:71A:something
:23E:something
value
:70:ACK2
ACK3
:71A:something

我如何使用Java实现这一目标?理想情况下,我想迭代所有值,即

ACK1\nACK2ACK2\nACK3

谢谢:)

编辑:我现在在做什么,

Pattern pattern = Pattern.compile("(?<=:70:)(.*)(?=\n)", Pattern.DOTALL);
Matcher matcher = pattern.matcher(data);
while (matcher.find()) {
   System.out.println(matcher.group())
}

2 个答案:

答案 0 :(得分:3)

试试这个。

String data = ""
    + ":32B:xxx,\n"
    + ":59:yyy\n"
    + "something\n"
    + ":70:ACK1\n"
    + "ACK2\n"
    + ":21:something\n"
    + ":71A:something\n"
    + ":23E:something\n"
    + "value\n"
    + ":70:ACK2\n"
    + "ACK3\n"
    + ":71A:something\n";
Pattern pattern = Pattern.compile(":70:(.*?)\\s*:", Pattern.DOTALL);
Matcher matcher = pattern.matcher(data);
while (matcher.find())
    System.out.println("found="+ matcher.group(1));

结果:

found=ACK1
ACK2
found=ACK2
ACK3

答案 1 :(得分:-1)

你需要一个循环才能做到这一点。

Pattern p = Pattern.compile(regexPattern);
List<String> list = new ArrayList<String>();
Matcher m = p.matches(input);
while (m.find()) {
    list.add(m.group());
}

如此处所见Create array of regex matches