【问题标题】:Using gsub in R在 R 中使用 gsub
【发布时间】:2016-11-30 00:37:22
【问题描述】:

我有一个html字符串(temp)如下

  "                                <span id=\"MainContent_lblGenAssessment\">$138,110</span></dd>"

我想使用 gsub 只返回 $138,110,不带引号或空格。

到目前为止我已经完成了

  gsub("<.*?>", "", z[temp[3]])

但这只会返回

  "                                $138,110"

【问题讨论】:

  • 使用trimws() 删除字符串trimws(gsub("&lt;.*?&gt;", "", z[temp[3]])) 开头或结尾的所有空格
  • 您应该放弃不带引号交付的请求,因为结果中没有引号字符。这些引号仅供参考,可以通过使用cat 或使用quotes=FALSE 打印来避免。查找trim 函数以进行后处理或更好地使用“^.+<.>| 之类的模式.+$" 将删除前导和尾随的垃圾。
  • 如果您期望 HTML 比这稍微复杂一些,那么您应该考虑使用 XML 解析器。

标签: r regex web-scraping


【解决方案1】:

如果您考虑使用 html/xml 解析器,正如@Tim Biegeleisen 提到的:

使用rvest(基于xml2),您可以执行以下操作:

require(rvest)
doc <- read_html( "                                <span id=\"MainContent_lblGenAssessment\">$138,110</span></dd>")
html_text(html_node(doc, "span"))

给你"$138,110"

以管道 (%&gt;%) 形式写成

doc %>% 
  html_node("span") %>% 
  html_text

【讨论】:

    【解决方案2】:

    一种解决方案是使用捕获组(括号中的位):

    \\s 匹配空格,[^&lt;]+ 匹配一个或多个不是&lt; 的字符。

    temp <- "                                <span id=\"MainContent_lblGenAssessment\">$138,110</span></dd>"
    out <- sub('\\s*<.*>([^<]+)<.*>\\s*', '\\1', temp)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 2011-06-29
      • 2016-06-09
      • 1970-01-01
      相关资源
      最近更新 更多