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
相关产品推荐
相关产品推荐

