2012-02-22 139 views
0

我想删除标签之间的文本并将标签添加到字符串数组。删除标签之间的文本w /正则表达式

例如: < TAG1> < TAG2>移除此</TAG2> </TAG1>

我读由线文本文档线和添加的每个标签,打开或关闭到一个阵列中,而不之间的文字,但我有麻烦。

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

谢谢!

回答

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]; 

+0

这个任务的重点是让我自己的XML解析器使用堆栈来检查文件的有效性。除了标签[0]始终为“”以外,上述表达式工作。有没有什么可以摆脱第一个空的元素? – Steve 2012-02-22 03:20:08

+0

@Steve:我已经更新了我的答案以解决这个问题。 – ruakh 2012-02-22 03:27:20

1

XML不是一种常规语言,因此无法单独使用正则表达式进行分析。这是计算机科学的基础。你正在使用错误的工具来完成这项工作。

我知道这是一个学生练习,学生有时会被设置为像大锤一样攻击坚果的任务,但任何计算机专业人员的反应仍然必须是那样做。

相关问题