【发布时间】:2012-03-12 09:33:39
【问题描述】:
我正在尝试删除标签之间的文本并将标签添加到字符串数组中。
例如:
我正在逐行读取文本文档并添加每个标签,打开或关闭数组,中间没有文本,但我遇到了麻烦。
我有 String[] tags = text.nextLine().split("");但我不确定正则表达式应该是什么数组 [tag1,tag2,/tag2,/tag1]
谢谢!
【问题讨论】:
我正在尝试删除标签之间的文本并将标签添加到字符串数组中。
例如:
我正在逐行读取文本文档并添加每个标签,打开或关闭数组,中间没有文本,但我遇到了麻烦。
我有 String[] tags = text.nextLine().split("");但我不确定正则表达式应该是什么数组 [tag1,tag2,/tag2,/tag1]
谢谢!
【问题讨论】:
你可以这样写:
String[] tags = text.nextLine().split("(?:^|>)[^<]*(?:<|$)");
但使用真正的 XML 解析器可能更安全。请注意,如果有任何 cmets <!-- ... --> 或处理指令 <? ... ?> 或诸如此类,或者如果其中一个标签包含 >(例如,<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];
)
【讨论】:
XML 不是正则语言,因此不能单独使用正则表达式对其进行解析。那是基础计算机科学。您使用了错误的工具来完成这项工作。
我知道这是一项学生练习,学生有时会布置作业,例如用大锤敲碎坚果,但任何计算机专业人士的反应仍然是,这不是这样做的方法。
【讨论】: