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

如何在R语言中批量截断并修改CSV文件名?

批量修改CSV文件名的R语言解决方案

需求说明

需要将格式为前缀_中间部分_日期_时间_时段_Original.csv的文件名,批量修改为前缀_中间部分.csv,保留第一个下划线,删除第二个下划线及之后的冗余内容。

可行方法

方法1:分组捕获替换

使用sub()结合正则分组,精准提取需要保留的部分:

# 原始文件名向量
names <- c("CHE1Q_S1001M1_20220615_025815_AM_Original.csv", 
           "CHE2Q_S1002M1_20220615_030435_AM_Original.csv", 
           "CHE6Q_S1053M2_20220615_033828_PM_Original.csv")

# 批量清理文件名
clean_names <- sub("^([^_]+_[^_]+)_.*\\.csv", "\\1.csv", names)

# 查看结果
clean_names

执行后输出:

[1] "CHE1Q_S1001M1.csv" "CHE2Q_S1002M1.csv" "CHE6Q_S1053M2.csv"

正则逻辑:

  • ^([^_]+_[^_]+):从字符串开头捕获第一组内容,包含「第一个下划线前的字符+第一个下划线+第二个下划线前的字符」;
  • _.*\\.csv:匹配第二个下划线到.csv前的所有冗余内容;
  • \\1.csv:将匹配内容替换为捕获的第一组内容,加上.csv后缀。

方法2:正向预查替换

利用正则正向预查特性,无需分组也能实现:

clean_names <- sub("(?<=_[^_]+)_.*", "", names, perl = TRUE)

执行后结果与方法1完全一致。
正则逻辑:

  • (?<=_[^_]+):正向预查,确保匹配位置前是「第一个下划线+中间部分字符」;
  • _.*:匹配从第二个下划线开始到结尾的所有内容,替换为空。

常见错误分析

  • sub('_.*', '', names):_.*会匹配第一个下划线及之后的所有内容,仅保留前缀部分;
  • sub('_.*\\_', '', names):匹配第一个下划线到最后一个下划线之间的内容,结果混乱;
  • 两步替换sub('_', '', names) + sub('_.*', '', names):错误删除了第一个下划线,丢失了需要保留的分隔符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:48:34