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

如何从R语言文件名字符串中提取指定数字与字符并拼接?

解决R语言字符串提取与拼接问题

方法一:基础R函数(无需正则)

因为你暂时没时间学正则,用基础R的字符串处理函数就能搞定,步骤清晰:

  1. 提取目标数字:
    先把路径按/拆分,取第二个目录段(比如ABC19_XY_10001),再按_拆分后取最后一段就是数字:

    string <- c("2019data/ABC19_XY_10001/finit1/ABC19_XY_10001_FAST (1).csv", 
                "2019data/ABC19_XY_2145/finit2/ABC19_XY_2154_GRABBER (1).csv")
    
    nums <- sapply(strsplit(string, "/"), function(x) {
      dir_segment <- x[2]
      tail(strsplit(dir_segment, "_")[[1]], 1)
    })
    
  2. 提取末尾单词:
    先取文件名,去掉.csv后缀和末尾的(1),再按_拆分取最后一段就是目标单词:

    words <- sapply(string, function(x) {
      fname <- basename(x)
      fname_no_ext <- sub("\\.csv$", "", fname)
      fname_clean <- sub(" \\(1\\)$", "", fname_no_ext)
      tail(strsplit(fname_clean, "_")[[1]], 1)
    })
    
  3. 拼接结果:

    result <- paste(nums, words, sep = "_")
    # 输出结果:"10001_FAST" "2145_GRABBER"
    

方法二:正则表达式(适合后续学习后使用)

等你学完正则后,可以用更简洁的写法,直接匹配并捕获两个目标部分:

library(stringr)

matches <- str_match(string, ".*/ABC19_XY_(\\d+)/.*_([A-Za-z]+) \\(1\\)\\.csv")
result <- paste(matches[,2], matches[,3], sep = "_")

这个正则的逻辑是:

  • .*ABC19_XY_(\\d+):捕获ABC19_XY_后面的数字
  • .*_([A-Za-z]+) \\(1\\)\\.csv:捕获最后一个下划线后、(1).csv前的单词

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:17:08