从向量中删除带有标记的数据

时间:2012-04-19 09:58:17

标签: r

我有一个包含html标签的字符串向量,例如

  abc<-""welcome <span class=\"r\"><a href=\"abc\">abc</a></span> Have fun!""

我想删除这些标签并获取以下向量

例如

       abc<-"welcome Have fun"

2 个答案:

答案 0 :(得分:1)

尝试

> gsub("(<[^>]*>)","",abc)

这说的是'替换&lt;的每个实例然后是任何不是&gt;达到&gt;什么都没有“

你不能只做gsub("<.*>","",abc),因为正则表达式是贪婪的,而。*会匹配到最后一个&gt;在你的文字中(你的例子中你会失去'abc')。

如果你有&gt;这个解决方案可能会失败在您的代码中 - 但<foo class=">" >合法吗?毫无疑问,有人会想出另一个涉及使用重量级XML包解析HTML的答案。

答案 1 :(得分:1)

您可以将您的HTML文件转换为XML文档 htmlParsehtmlTreeParse。 然后,您可以将其转换为文本, 即,使用xmlValue删除所有标记。

abc <- "welcome <span class=\"r\"><a href=\"abc\">abc</a></span> Have fun!"
library(XML)
#doc <- htmlParse(abc, asText=TRUE)
doc <- htmlTreeParse(abc, asText=TRUE)
xmlValue( xmlRoot(doc) )

如果您还想删除链接的内容, 您可以使用xmlDOMApply转换XML树。

f <- function(x) if(xmlName(x) == "span") xmlTextNode(" ") else x
d <- xmlDOMApply( xmlRoot(doc), f )
xmlValue(d)