gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:48:47 25 4
gpt4 key购买 nike

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

+ 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.

输出

区 block 1 +你摇滚 - 我摇滚并统治。

区 block 2 + 你统治 - 我摇滚并统治。 - 那是一个完美的人造实体。

这是我当前的正则表达式

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

在上面的表达式中,组 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));
}

如何将所有前面带有减号的语句作为数组获取?

最佳答案

使用此正则表达式 ^\+[^+]*mg 修饰符可以得到所需的结果
https://regex101.com/r/bH1aQ9/1

您的测试数据结果将是 3 组以 + 字符开头。

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

更新

考虑@Pshemo关于行内可能的+字符的注释

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

关于java - 正则表达式,从捕获的组中获取数组Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39334809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com