【发布时间】:2012-04-19 09:58:16
【问题描述】:
我有一个包含 html 标签的字符串向量,例如
abc<-""welcome <span class=\"r\"><a href=\"abc\">abc</a></span> Have fun!""
我想删除这些标签并获得以下向量
例如
abc<-"welcome Have fun"
【问题讨论】:
标签: r
我有一个包含 html 标签的字符串向量,例如
abc<-""welcome <span class=\"r\"><a href=\"abc\">abc</a></span> Have fun!""
我想删除这些标签并获得以下向量
例如
abc<-"welcome Have fun"
【问题讨论】:
标签: r
试试
> gsub("(<[^>]*>)","",abc)
这句话的意思是“将 的 > 直到 > 什么都没有”
您不能只使用gsub("<.*>","",abc),因为正则表达式是贪婪的,并且 .* 会匹配文本中的最后一个 >(并且您会丢失示例中的“abc”)。
如果您的标签中有 >,此解决方案可能会失败 - 但 <foo class=">" > 合法吗?毫无疑问,有人会想出另一个答案,涉及使用重量级 XML 包解析 HTML。
【讨论】:
您可以使用以下命令将您的 HTML 片段转换为 XML 文档
htmlParse 或 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) )
如果您还想删除链接的内容,
您可以使用xmlDOMApply 来转换 XML 树。
f <- function(x) if(xmlName(x) == "span") xmlTextNode(" ") else x
d <- xmlDOMApply( xmlRoot(doc), f )
xmlValue(d)
【讨论】: