我有一个包含 html 标签的字符串向量,例如
abc<-""welcome <span class=\"r\"><a href=\"abc\">abc</a></span> Have fun!""
我想删除这些标签并获得以下矢量
例如
abc<-"welcome Have fun"
我有一个包含 html 标签的字符串向量,例如
abc<-""welcome <span class=\"r\"><a href=\"abc\">abc</a></span> Have fun!""
我想删除这些标签并获得以下矢量
例如
abc<-"welcome Have fun"
尝试
> gsub("(<[^>]*>)","",abc)
这说的是'用任何不是>的任何东西替换<的每个实例,直到一个>,什么都没有”
你不能这样做gsub("<.*>","",abc)
,因为正则表达式是贪婪的,并且 .* 会匹配你文本中的最后一个 > (并且你会在你的例子中失去'abc')。
如果您的标签中有 >,此解决方案可能会失败 - 但是否<foo class=">" >
合法?毫无疑问,有人会想出另一个答案,涉及使用重量级 XML 包解析 HTML。
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) )
如果您还想删除链接的内容,可以使用xmlDOMApply
XML 树进行转换。
f <- function(x) if(xmlName(x) == "span") xmlTextNode(" ") else x
d <- xmlDOMApply( xmlRoot(doc), f )
xmlValue(d)