我有一些文本以特定格式出现,如下所示 每行以+开头,后跟空格和一些文本 然后它有一堆粘在一起的线,以减号或@或%或*和空格开头,后面跟着一些文字。我想使用正则表达式从下面分别捕获每个块。
+ 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));
}
如何将所有在它们前面带有减号的语句作为数组?
答案 0 :(得分:2)
将此正则表达式^\+[^+]*
与m
和g
修饰符一起使用可为您提供所需的结果
https://regex101.com/r/bH1aQ9/1
在您的测试数据结果中,将有3个组以+
字符开头。
解决方案的想法是将所有线条视为一条大线,并将其拆分为群组,并以+
开头并且内部没有+
。
<强>更新强>
考虑@Pshemo关于行内可能+
个字符的说明
带有^\+.*?(^$|\Z)
,s
和m
修饰符的正则表达式g
https://regex101.com/r/bH1aQ9/1