如何在两个不同的xml标签之间提取多行文本

时间:2017-12-11 07:13:53

标签: java regex xml

例如,我们有一些这样的xml

<parent>
    <child>SomeText</child>sometext<otherChild>sometext</otherChild>
    <child>SomeText2</child>somtext2<otherChild>sometext2</otherChild>
</parent>

可以应用哪个正则表达式以便在</child>之后和下一个<child>之前提取内容 该字符串应在第1组中提取sometext<otherChild>sometext</otherChild>,第2组应包含somtext2<otherChild>sometext2</otherChild>

已经尝试过像这样应用正则表达式,但它仅适用于第一场比赛

String textToParse = ...;
Pattern pattern = Pattern.compile("(?<=</child>)(.*?)(?=<child>)", Pattern.DOTALL);

        final Matcher matcher = pattern.matcher(textToParse);
        if (matcher.find()) {
            LOGGER.info(matcher.group());
        }

1 个答案:

答案 0 :(得分:1)

这应该有效:

Pattern pattern = Pattern.compile("(?<=</child>)(.*?)(?=<child>|</parent>)", Pattern.DOTALL);

添加|</parent>,因为在上一个匹配项中没有下一个<child>标记。

此外,您应该再次matcher.find()matcher.group()进入下一场比赛。