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

是否存在R函数可从HTML字符串列中提取特定变量值?

从HTML字符串列提取特定字段到数据框新列

问题场景

现有数据框包含name和bio列,其中bio是带HTML标签的长字符串,需要从中提取<status>和<profession>标签内的内容,生成对应的新列。

现有数据:

name <- c("John", "Max")
bio <- c("<status>1</status><profession>Revisor</professio>", "<status>1</status><born>19.06.1995</born><profession>Tech</professio>" )

df <- data.frame(name, bio)

期望得到包含name、status、profession列的数据框。


方法一:使用正则表达式(适合简单HTML结构)

借助stringr包的字符串处理函数快速提取内容,注意匹配示例中不完整的结束标签</professio>:

library(stringr)

# 提取status并转换为整数
df$status <- str_extract(df$bio, "<status>(.*?)</status>") %>% 
  str_remove_all("<status>|</status>") %>% 
  as.integer()

# 提取profession
df$profession <- str_extract(df$bio, "<profession>(.*?)</professio>") %>% 
  str_remove_all("<profession>|</professio>")

# 保留需要的列
df <- df[, c("name", "status", "profession")]

方法二:使用xml2包(规范HTML解析)

对于复杂HTML结构,用专业的HTML解析包更可靠,先补全示例中不完整的标签再解析:

library(xml2)

# 定义通用提取函数
extract_tag <- function(html_str, tag) {
  # 补全示例中不完整的结束标签
  fixed_html <- gsub("</professio>", "</profession>", html_str)
  # 包裹根标签确保解析正常
  doc <- read_html(paste0("<root>", fixed_html, "</root>"))
  # 提取目标标签的文本内容
  xml_text(xml_find_first(doc, paste0("//", tag)))
}

# 批量提取字段
df$status <- as.integer(sapply(df$bio, extract_tag, tag = "status"))
df$profession <- sapply(df$bio, extract_tag, tag = "profession")

# 整理列
df <- df[, c("name", "status", "profession")]

两种方法最终都能得到期望的数据框结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:05:30