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

R语言中从数据框列的JSON格式字符串提取指定词汇的方法

解决方法

首先,你之前的正则匹配不到是因为目标字符串里的名称(比如Bank)后面跟着的是',而不是'},所以你的正则\\w+(?='\\})找不到对应的匹配项。下面给你两种可靠的解决方式:

方法一:解析为JSON(推荐)

因为你的字符串本质是类似JSON的结构,用专门的JSON解析工具比正则更稳妥,不容易出错。步骤如下:

  1. 先把字符串里的单引号替换成双引号,转换成合法的JSON格式
  2. 使用jsonlite包解析,直接提取name字段
library(jsonlite)
# 假设A是你数据框列中的单个字符串元素
A <- "[{'name': 'Bank', 'id': 559}, {'name': 'Cinema', 'id': 2550}, {'name': 'Shopping', 'id': 10201}]"

# 替换单引号为双引号
valid_json <- gsub("'", '"', A)
# 解析JSON并提取name列
result <- fromJSON(valid_json)$name
print(result)
# 输出:[1] "Bank"    "Cinema"  "Shopping"

如果是数据框的整列操作,可以用dplyr配合处理:

library(dplyr)
library(jsonlite)
library(purrr)

your_df <- your_df %>%
  mutate(names_list = map_chr(your_target_column, function(x) {
    valid_json <- gsub("'", '"', x)
    paste(fromJSON(valid_json)$name, collapse = ", ")
  }))

方法二:使用正则表达式

如果你一定要用正则来提取,可以调整正则表达式,匹配'name': '和下一个'之间的内容:

library(stringr)
A <- "[{'name': 'Bank', 'id': 559}, {'name': 'Cinema', 'id': 2550}, {'name': 'Shopping', 'id': 10201}]"

result <- str_extract_all(A, "(?<='name': ')[^']+(?=')")[[1]]
print(result)
# 输出:[1] "Bank"    "Cinema"  "Shopping"

正则解释:

  • (?<='name': '):正向回顾断言,确保匹配内容的前面是'name': '
  • [^']+:匹配任意数量的非单引号字符(也就是我们要提取的名称)
  • (?='):正向预查断言,确保匹配内容的后面是单引号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:05:35