0

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

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

我想删除这些标签并获得以下矢量

例如

       abc<-"welcome Have fun"
4

2 回答 2

2

尝试

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

这说的是'用任何不是>的任何东西替换<的每个实例,直到一个>,什么都没有”

你不能这样做gsub("<.*>","",abc),因为正则表达式是贪婪的,并且 .* 会匹配你文本中的最后一个 > (并且你会在你的例子中失去'abc')。

如果您的标签中有 >,此解决方案可能会失败 - 但是否<foo class=">" >合法?毫无疑问,有人会想出另一个答案,涉及使用重量级 XML 包解析 HTML。

于 2012-04-19T10:08:46.783 回答
1

htmlParse您可以使用或将您的 HTML 片段转换为 XML 文档 htmlTreeParse。然后,您可以将其转换为文本,即用 . 去除所有标签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) )

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

f <- function(x) if(xmlName(x) == "span") xmlTextNode(" ") else x
d <- xmlDOMApply( xmlRoot(doc), f )
xmlValue(d)
于 2012-04-19T12:00:56.563 回答