【问题标题】:removing data with tags from a vector从向量中删除带有标签的数据
【发布时间】: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


    【解决方案1】:

    试试

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

    这句话的意思是“将 的 > 直到 > 什么都没有”

    您不能只使用gsub("&lt;.*&gt;","",abc),因为正则表达式是贪婪的,并且 .* 会匹配文本中的最后一个 >(并且您会丢失示例中的“abc”)。

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

    【讨论】:

    • 谢谢 Spacedman 如果向量中包含像 a 这样的超链接abc.com") 我们如何删除它
    • 你必须在问题中坚持这个例子,因为 cmets 倾向于重新格式化文本并将事情搞砸......
    【解决方案2】:

    您可以使用以下命令将您的 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多