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

在R语言中如何用正则表达式提取文件名中的时间信息(Baseline/6M)

在R语言中如何用正则表达式提取文件名中的时间信息(Baseline/6M)

嘿,我来帮你搞定这个提取时间信息的问题!你已经成功拿到了研究编号,现在要提取Baseline或者6M这类时间标识,其实用正则表达式可以很轻松实现,我给你两种实用的方法:

方法一:用基础R的gsub函数

我们可以通过替换掉不需要的内容来留下目标信息。观察你的文件名结构,时间信息总是在最后一个下划线_之后,.xlsx之前。所以可以写这样的正则:

# 测试第一个文件名
qtest1 <- "Folder//study30/01_study30_Baseline.xlsx"
time1 <- gsub(".+_(.+?)\\.xlsx$", "\\1", qtest1)
time1
# 输出: [1] "Baseline"

# 测试第二个文件名
qtest2 <- "Folder//study30/01_study30_6M.xlsx"
time2 <- gsub(".+_(.+?)\\.xlsx$", "\\1", qtest2)
time2
# 输出: [1] "6M"

简单解释下这个正则的逻辑:

  • .+_:用贪婪匹配找到最后一个下划线之前的所有内容(因为.+会尽可能匹配更多字符)
  • (.+?):用非贪婪匹配捕获我们需要的时间信息(括号里的内容会被保存为分组)
  • \\.xlsx$:匹配文件名结尾的.xlsx
  • \\1:把整个字符串替换成我们捕获的第一个分组(也就是时间信息)

方法二:用stringr包的str_extract函数(更直观)

如果你习惯用stringr包(tidyverse系列的工具,语法更友好),可以直接用str_extract提取目标内容,不用替换:

library(stringr)

# 提取第一个文件的时间
str_extract(qtest1, "(?<=_)\\w+(?=\\.xlsx$)")
# 输出: [1] "Baseline"

# 提取第二个文件的时间
str_extract(qtest2, "(?<=_)\\w+(?=\\.xlsx$)")
# 输出: [1] "6M"

这个正则用了预查语法,更直观:

  • (?<=_):反向预查,确保目标内容前面是下划线_
  • \\w+:匹配字母、数字(刚好覆盖Baseline和6M这类格式)
  • (?=\\.xlsx$):正向预查,确保目标内容后面是.xlsx结尾

另外,你之前用grep的方式不对哦——grep主要用来判断哪些字符串匹配了正则,或者返回匹配的整个字符串,而不是提取其中的部分内容,所以改用gsub或者str_extract才是正确的方向~

备注:内容来源于stack exchange,提问作者Mark Davies

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:18:07