You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R处理网页提取文本:如何移除难以清除的末尾空白?

解决参考文献末尾空白残留的问题

问题分析

你当前的代码中,gsub("\\s|\n", " ", .)只会替换单个空白/换行,无法处理连续的空白字符,而且可能存在不可见的Unicode空白字符(比如非断空格 U+00A0),这些是trimws默认参数没覆盖到的,导致末尾空白残留。

改进方案

方案1:优化正则表达式,覆盖连续空白与Unicode空白

修改你的代码,把连续空白合并为单个,同时在trimws中加入Unicode空白的匹配:

library(dplyr)
library(rvest)

url <- "http://www.scielo.org.mx/scielo.php?script=sci_arttext&pid=S1607-40412016000100014&lang=es"

page <- read_html(url)
referenes_cleaned <- page %>%
  html_elements("p") %>% 
  .[grepl("(Links)|(doi:)", as.character(.))] %>%
  html_text() %>% 
  # 移除换行、制表符等控制字符
  gsub("[\n\t\b]", "", .) %>%
  # 移除Links标记
  gsub("\\[.*Links.*\\]", "", .) %>%
  # 把所有连续空白(包括普通空格、Unicode非断空格)替换为单个空格
  gsub("[\\s\\u00A0]+", " ", .) %>% 
  # 清理首尾所有类型的空白
  trimws("both", whitespace = "[\\s\\u00A0\r\n\b]")

referenes_cleaned

方案2:使用stringr包的str_squish简化操作

stringr::str_squish会自动移除所有开头/结尾的空白,并将中间的连续空白合并为单个,还能处理Unicode空白,代码更简洁:

library(dplyr)
library(rvest)
library(stringr)

url <- "http://www.scielo.org.mx/scielo.php?script=sci_arttext&pid=S1607-40412016000100014&lang=es"

page <- read_html(url)
referenes_cleaned <- page %>%
  html_elements("p") %>% 
  .[grepl("(Links)|(doi:)", as.character(.))] %>%
  html_text() %>% 
  gsub("[\n\t\b]", "", .) %>%
  gsub("\\[.*Links.*\\]", "", .) %>%
  # 一步完成空白清理
  str_squish()

referenes_cleaned

关键说明

  • \\s+匹配一个或多个连续空白,替换为单个空格,避免中间出现冗余空格
  • \\u00A0是常见的非断空格,很多网页会用它来排版,默认的trimws不会处理这个字符
  • str_squish是stringr包的便捷函数,底层已经处理了各种空白类型,推荐使用

内容的提问来源于stack exchange,提问作者Armando González Díaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:05:38