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

如何用R语言结合正则从EPA网页提取NPDES SIC代码及描述?

解决R语言提取EPA页面NPDES SIC代码的正则问题

嘿,我帮你搞定这个提取问题!你之前的正则出错是因为没先筛选出目标行,导致匹配到了页面里其他地方的四位数字,咱们一步步来修正:

问题根源

你用as.numeric(sub(".*?NPDES.*?(\\d{4}).*", "\\1", test))得到错误结果,是因为test是页面所有<tr>标签的文本向量,里面不止包含你要的那一行——正则会匹配整个向量中第一个符合NPDES后接四位数字的内容,而这个内容可能来自其他无关行,自然就拿到了错误的数字。

解决方案:先定位目标行,再提取内容

咱们先精准拿到包含NPDES SIC的那一行,再拆分提取代码和描述,有两种常用方法:

方法1:用rvest+stringr(更简洁)

library(rvest)
library(stringr)

# 读取目标页面
page <- read_html("https://iaspub.epa.gov/enviro/fii_query_dtl.disp_program_facility?pgm_sys_id_in=MDG766216&pgm_sys_acrnm_in=NPDES")

# 直接定位到包含"NPDES"的表格行
target_row <- page %>% 
  html_nodes("tr:contains('NPDES')") %>% 
  html_text()

# 按换行符拆分内容,过滤掉空字符串
row_parts <- str_split(target_row, "\\n")[[1]] %>% 
  keep(. != "")

# 提取SIC代码和描述,组合成目标格式
sic_code <- row_parts[2]
sic_desc <- str_to_title(row_parts[3]) # 可选:转标题大小写,不需要就去掉
final_result <- paste(sic_code, sic_desc)

print(final_result)
# 输出:"6515 Operators Of Residential Mobile Home Sites"

方法2:只用base R(无需额外包)

library(rvest)

# 读取页面并获取所有tr文本
test <- read_html("https://iaspub.epa.gov/enviro/fii_query_dtl.disp_program_facility?pgm_sys_id_in=MDG766216&pgm_sys_acrnm_in=NPDES") %>% 
  html_nodes("tr") %>% 
  html_text()

# 筛选出包含"NPDES"的目标行
target_line <- test[grepl("NPDES", test)]

# 提取四位SIC代码
sic_code <- regmatches(target_line, regexpr("\\d{4}", target_line))

# 提取描述:去掉开头的NPDES+代码部分,以及末尾的空白
sic_desc <- gsub("^NPDES\\n\\d{4}\\n|\\s*$", "", target_line)

# 组合结果
final_result <- paste(sic_code, sic_desc)

print(final_result)
# 输出:"6515 OPERATORS OF RESIDENTIAL MOBILE HOME SITES"

关键要点

  • 先筛选目标行:一定要先把包含"NPDES"的行单独提取出来,避免其他行的无关数字干扰正则匹配。
  • 精准拆分/匹配:利用换行符拆分内容,或者用\\d{4}精准匹配四位SIC代码,都能高效拿到你要的信息。

内容的提问来源于stack exchange,提问作者happymappy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:38:40