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

R语言如何正确提取文件名中下划线之前的内容?

问题解答

首先说明你两种写法的错误原因:

  • 第一种写法strsplit(count_files, "_*"):正则中_*代表匹配0个或多个下划线,等效于按空字符拆分,会把所有字符逐个拆开,完全不符合需求。
  • 第二种写法strsplit(count_files, "_*.[c,t]sv"):正则逻辑存在多处错误:_*还是匹配0个或多个下划线,.匹配任意单字符,[c,t]sv实际匹配的是c/、/t开头加sv的字符组合,完全无法定位到第一个下划线的位置。

可行实现方案

方案1:base R 原生strsplit实现

直接按下划线拆分后,取每个拆分结果的第一个元素即可:

# 示例文件名列表
count_files <- c("group1_rep1.csv", "group2_rep2_3.csv", "sampleA_test.csv")
# 拆分后取首个元素
condition <- sapply(strsplit(count_files, split = "_"), function(x) x[1])

方案2:base R 正则替换实现(更简洁)

用sub函数直接替换掉第一个下划线及之后的所有内容,剩下的就是目标内容:

condition <- sub("_.+$", "", count_files)

正则说明:_匹配第一个下划线,.+匹配任意数量的任意字符,$匹配字符串末尾,整体即匹配第一个下划线到结尾的全部内容,用空替换后就得到下划线前的内容。

方案3:stringr包函数实现(代码可读性更高)

如果允许使用第三方包,用str_extract直接匹配目标内容即可:

library(stringr)
condition <- str_extract(count_files, "^[^_]+")

正则说明:^匹配字符串开头,[^_]+匹配1个及以上非下划线的字符,刚好对应第一个下划线之前的全部内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:36:03