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

如何在R语言中从文件名里提取目标年份?

提取文件名中目标年份的正确正则方案

你需要从给定文件名里精准提取特定4位年份,原正则因为匹配范围过宽导致结果不符合预期,下面是针对性的解决方法:

问题分析

你的原正则[0-9].*[0-9]会匹配文件名中从第一个数字开始到最后一个数字结束的所有字符,所以第二个文件会返回20140211_02_2012,第三个返回20150219_2013。而我们要的是每个文件名里最后出现的4位连续数字(也就是你需要的2014、2012、2013)。

解决方案1:基础R原生函数实现

无需额外安装包,用regexec和regmatches组合即可实现:

# 定义文件名向量
files <- c(
  "2014_by_country_and_type_Enlarged_Europe.xlsx",
  "20140211_02_2012_vo_By_Country_Enlarged_Europe.xls",
  "20150219_2013_vo_By_Country_Enlarged_Europe.xlsx"
)

# 捕获最后出现的4位数字
match_results <- regmatches(files, regexec(".*(\\d{4})", files))
# 提取捕获组中的年份内容
target_years <- sapply(match_results, `[`, 2)

# 查看结果
target_years

运行后输出:

[1] "2014" "2012" "2013"

解决方案2:用stringr包简化代码

如果习惯使用tidyverse生态的stringr包,可通过更简洁的代码实现:

library(stringr)

# 提取最后出现的4位数字
target_years <- str_extract(files, "\\d{4}(?!.*\\d{4})")
target_years

同样会得到你需要的目标结果。

正则逻辑解释

  • \\d{4}:匹配连续4位数字,符合年份的典型格式
  • (?!.*\\d{4}):负向前瞻断言,确保当前匹配的4位数字后面不会再出现其他4位数字,从而精准定位到每个文件名里的目标年份

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:45:43