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

如何从含字符串列表的R数据框列提取倒数两横杠间的子串

提取字符串倒数第二个与最后一个横杠间子串(含列表格式处理)

针对你的需求,这里提供一套R语言实现方案,同时兼容普通字符串和列表格式的观测值:

实现步骤

  1. 编写自定义函数,区分普通字符串和列表格式字符串分别处理
  2. 将函数批量应用到数据框目标列,生成新列

自定义提取函数

extract_target <- function(x) {
  # 识别列表格式字符串(以c(开头)
  if (grepl("^c\\(", x)) {
    # 剥离c(和)的包裹
    x_clean <- gsub("^c\\(|\\)$", "", x)
    # 拆分出列表中的每个元素
    elements <- strsplit(x_clean, ", ")[[1]]
    # 去掉元素两端的引号
    elements <- gsub('"', "", elements)
    # 对每个元素提取目标子串
    res <- sapply(elements, function(y) {
      # 正则捕获倒数第二个-与最后一个-之间的内容
      sub(".*-([^-]+)-[^-]+$", "\\1", y)
    })
    # 用逗号拼接多个结果
    paste(res, collapse = ", ")
  } else {
    # 普通字符串直接用正则提取
    sub(".*-([^-]+)-[^-]+$", "\\1", x)
  }
}

应用函数生成新列

# 给数据框添加新列a_clean
data$a_clean <- sapply(data$a, extract_target)

结果验证

运行代码后,查看生成的新列:

> data$a_clean
[1] "29139"          "2913A"          "200B, 2919999"

完全符合你期望的输出。

正则说明

用到的正则表达式.*-([^-]+)-[^-]+$:

  • .*:匹配任意字符直到倒数第二个横杠
  • ([^-]+):捕获倒数第二个横杠和最后一个横杠之间的所有非横杠字符(目标内容)
  • -[^-]+$:匹配最后一个横杠及其后面的所有内容,确保只提取倒数第二个区间的子串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:15:01