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

R语言如何用正则表达式从文件路径提取指定范围的年份和周数字段

R路径字符串批量提取年份和周数实现方案

核心思路

不需要锚定固定位置,直接通过零宽断言限定匹配符合取值范围的目标字段,避开路径中其他干扰数字,适配非固定位置的提取需求。

正则规则设计

  • 年份匹配:限定取值范围1999~2019,同时要求匹配到的年份前后为路径分隔符/,避免匹配到路径中其他区间标注的年份(例如示例中总文件夹名的1999 - 2019字段)
    正则表达式:(?<=/)1999|200[0-9]|201[0-9](?=/)
  • 周数匹配:限定取值范围1~16,兼容大小写写法,同时要求匹配到的周数字段前为路径分隔符/、后为文件后缀的.,避免匹配到其他位置的相关字符
    正则表达式:(?<=/)[Ww]eek(1[0-6]|[1-9])(?=\\.)

R代码实现

基于stringr包的矢量化操作实现,600万条记录可在数秒内完成处理,无需循环:

# 加载依赖包
library(stringr)

# 假设你的数据框名为df,先将行名存储为路径列
df$file_path <- rownames(df)

# 提取年份并转为整数格式
df$year <- str_extract(df$file_path, "(?<=/)1999|200[0-9]|201[0-9](?=/)") |> 
  as.integer()

# 提取周数,移除week前缀后转为整数格式
df$week <- str_extract(df$file_path, "(?<=/)[Ww]eek(1[0-6]|[1-9])(?=\\.)") |> 
  str_remove("[Ww]eek") |> 
  as.integer()

# 可选:校验提取结果合法性,过滤异常路径
valid_df <- df[df$year %in% 1999:2019 & df$week %in% 1:16, ]

特殊场景适配

如果部分路径的周数字段后不是.,而是直接跟/的子目录结构,可将周数正则的后置断言调整为(?=[\\./]),同时适配两种后缀场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 20:27:03