正则表达式,从捕获的组Java中获取数组

时间:2016-09-05 16:48:45

标签: java regex

我有一些文本以特定格式出现,如下所示 每行以+开头,后跟空格和一些文本 然后它有一堆粘在一起的线,以减号或@或%或*和空格开头,后面跟着一些文字。我想使用正则表达式从下面分别捕获每个块。

+ you rock
- I rock and rule.

+ you rule
- I rock and rule.
- That is a perfect artificial entity.

+ you made a mistake
- That is impossible. I never make mistakes.
- I guess so, something must have gone wrong.

输出

第1座     +你摇滚      - 我摇滚和统治。

第2座     +你统治      - 我摇滚和统治。      - 这是一个完美的人造实体。

这是我目前的正则表达式

(^\+.*$)(?:\r?\n)(?:(^[-%@\*].*$)(?:\r?\n)?)+

在上面的表达式中,Group 1 =(^ +。 $)捕获一个+,组2 =(^ [ - %@ *]。 $)后面的语句捕获第二个但请注意,可能有一个以上的陈述在开始时有一个 -

当我在Java代码中运行while循环时

Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(contents);
while (matcher.find()) {
    // This gives me the item following +
    System.out.println(matcher.group(1));
    // This ONLY gives me the last item following -, how do I get all
    System.out.println(matcher.group(2));
}

如何将所有在它们前面带有减号的语句作为数组?

1 个答案:

答案 0 :(得分:2)

将此正则表达式^\+[^+]*mg修饰符一起使用可为您提供所需的结果
https://regex101.com/r/bH1aQ9/1

在您的测试数据结果中,将有3个组以+字符开头。

解决方案的想法是将所有线条视为一条大线,并将其拆分为群组,并以+开头并且内部没有+

<强>更新

考虑@Pshemo关于行内可能+个字符的说明

带有^\+.*?(^$|\Z)sm修饰符的正则表达式g https://regex101.com/r/bH1aQ9/1