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

R语言正则表达式提取文件名片段实现重命名的方法

R语言提取CEL文件名指定片段用于重命名

待处理示例数据

s <- c("(1) 1-B1-1_(miRNA-4_0).CEL", 
       "(10) 1-NEC 4-1_(miRNA-4_0).CEL", 
       "(11) 1-B5-1_(miRNA-4_0).CEL", 
       "(12) 1-B5-2_(miRNA-4_0).CEL")

需求为提取每个文件名中,以1-起始、到下划线_前最后一位数字结束的片段,预期输出为1-B1-1、1-NEC 4-1、1-B5-1、1-B5-2,用于后续批量重命名。

实现方法

基础R实现(无需安装额外包)

直接调用内置sub()函数通过正则捕获替换即可:

rename_vec <- sub(".*(1-.*\\d)_.*", "\\1", s)

运行后rename_vec的输出完全符合预期:

[1] "1-B1-1"    "1-NEC 4-1" "1-B5-1"    "1-B5-2"

正则逻辑说明

  • .*:贪婪匹配目标片段前的所有冗余内容(开头括号+序号+空格部分),自动跳过所有非目标位置的1字符
  • (1-.*\\d):捕获组,对应需要保留的内容:从1-开始,匹配所有字符直到下划线前的最后一位数字
  • _.*:匹配下划线以及后续所有文件后缀内容
  • \\1:将整段文件名替换为第一个捕获组的内容,即目标片段

stringr包实现(适配tidyverse工作流)

如果日常使用tidyverse生态处理数据,可以用str_extract()配合正向预查语法实现,逻辑更直观:

library(stringr)
rename_vec <- str_extract(s, "1-.*(?=_)")

其中(?=_)是正向零宽断言,代表匹配到下划线前的位置即停止,返回结果和基础R写法完全一致。

提取完成后直接配合file.rename()函数即可完成批量重命名操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:51:24