【问题标题】:Split String by XML tags in Java在 Java 中通过 XML 标记拆分字符串
【发布时间】:2014-04-16 22:37:37
【问题描述】:

我想在 Java 中编写一个通过 XML 标记拆分字符串的方法,如下所示:

"Lorem ipsum <b>dolor</b> sit amet consetetur <b>diam</b> nonumy."

应该返回数组:

["Lorem ipsum ", "<b>dolor</b>", " sit amet consetetur ", "<b>diam</b>", " nonumy."]

这应该适用于每个 XML 标记,也适用于 &lt;element /&gt; 等自闭合标记。

是否有以简单方式执行类似操作的库?

谢谢!

【问题讨论】:

    标签: java xml regex xml-parsing


    【解决方案1】:

    在拆分中使用环视应该可以解决问题:

    String splits[] = input.split("\\s+(?=<b>)|(?<=</b>)\\s+");
    

    例子:

    String input = "Lorem ipsum <b>dolor</b> sit amet consetetur <b>diam</b> nonumy.";
    for(String s : input.split("\\s+(?=<b>)|(?<=</b>)\\s+")){
        System.out.println(s);
    }
    

    如果您想在您的 spitted 数组中保持空间完整,请从正则表达式中删除 \\s+

    【讨论】:

    • 太棒了!作为后续问题:您知道我可以使用的每个 XML 标记的通用正则表达式吗?我不知道会出现哪些标签。正则表达式也应该匹配像&lt;element/&gt;这样的自闭标签和属性。
    • 变量标签不能作为lookbehind(&lt;=...)只支持固定长度。
    • 我已经用(?=&lt;mynamespace:.*?&gt;)|(?&lt;=&lt;/mynamespace:.{1,20}&gt;)的间隔解决了这个问题。
    • 好的,带有自闭标签的正则表达式如下所示:((?=&lt;mynamespace:.*?&gt;)|(?&lt;=&lt;/mynamespace:.{1,20}&gt;))|((?=&lt;mynamespace:.*?)|(?&lt;=/&gt;)).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多