JAVA REGEX:将嵌套的相同值组成单个组

时间:2017-04-10 03:56:58

标签: java regex regex-group

我在正则表达式中有一个问题。

我想将嵌套的相同值组合成一个组。

但是,我试图使用正则表达式,我将无法工作。

示例字符串:

<one listtype="NumberList1">one</one>
<one listtype="NumberList1">one</one>
<one listtype="NumberList1">one</one>

我希望将三个<one></one>标记作为一个组。

我该怎么做?

我的正则表达式是:

Pattern pattern = Pattern.compile("(<one (.*?)>(.*?)</one>)+");
    Matcher matcher = pattern.matcher(val);
    while (matcher.find()) {
        System.out.println("group 1: " + matcher.group(1));
        }

我的结果是:

 group 1:<one listtype="NumberList1">one</one>
 group 1:<one listtype="NumberList1">one</one>
 group 1:<one listtype="NumberList1">one</one>

我想:

group 1:<one listtype="NumberList1">one</one><one listtype="NumberList1">one</one><one listtype="NumberList1">one</one>

我想把它作为一个单独的小组。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

如果你想连续匹配三个这样的<one>标签,那么只需使用合适的模式:

Pattern pattern = Pattern.compile("((?:<one (?:.*?)>(?:.*?)</one>\\s*){3})");
Matcher matcher = pattern.matcher(val);
while (matcher.find()) {
    System.out.println("group 1: " + matcher.group(1));
}

在这里演示:

Rextester