我试图删除标签之间的文本并将标签添加到String数组中。
例如: < tag1>< tag2>删除此< / tag2>< / tag1>
我正在逐行阅读文本文档并添加每个标记,打开或关闭数组,没有文本,但我遇到了麻烦。
我有String [] tags = text.nextLine()。split(“”);但我不确定正则表达式应该是一个数组[tag1,tag2,/ tag2,/ tag1]
谢谢!
答案 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不是常规语言,因此无法仅使用正则表达式进行解析。那是计算机科学的基础。你正在使用错误的工具。
我知道这是一项学生练习,学生有时会设置像用大锤敲打坚果一样的任务,但任何计算机专业人员的反应仍然是那不是那种方法。