删除带有正则表达式的标签之间的文本

时间:2012-02-22 02:27:47

标签: java xml regex

我试图删除标签之间的文本并将标签添加到String数组中。

例如: < tag1>< tag2>删除此< / tag2>< / tag1>

我正在逐行阅读文本文档并添加每个标记,打开或关闭数组,没有文本,但我遇到了麻烦。

我有String [] tags = text.nextLine()。split(“”);但我不确定正则表达式应该是一个数组[tag1,tag2,/ tag2,/ tag1]

谢谢!

2 个答案:

答案 0 :(得分:2)

你可以这样写:

String[] tags = text.nextLine().split("(?:^|>)[^<]*(?:<|$)");

但使用真正的XML解析器可能更安全。请注意,如果有任何评论<!-- ... -->或处理说明<? ... ?>或诸如此类,或者其中一个标记包含>(例如,<span title='12 > 11'>),则上述内容会出现异常,或者在其他各种情况下。正则表达式不是解析XML的好工具。


编辑添加:为了避免第一个元素为空,您可以进行一些预处理以去除第一个标记之前的所有内容,并相应地调整split

String[] tags = text.nextLine().replaceFirst("^[^<]*<?").split(">[^<]*(?:<|$)");

(注意:如果text.nextLine()根本不包含任何标签,那么这将导致一个带有一个空元素的数组。如果你想摆脱它,你可以做到上面的第二步:

if(tags.size == 1 && tags[0].isEmpty())
    tags = new String[0];

答案 1 :(得分:1)

XML不是常规语言,因此无法仅使用正则表达式进行解析。那是计算机科学的基础。你正在使用错误的工具。

我知道这是一项学生练习,学生有时会设置像用大锤敲打坚果一样的任务,但任何计算机专业人员的反应仍然是那不是那种方法。