如何使用tidyverse从URL编码文件名中提取月份年份格式的日期
基于tidyverse的日期提取解决方案
核心思路:你的文件名日期格式非常固定,均为【英文月份全称+空格+4位年份】的组合,直接通过正则匹配即可一步提取,不需要提前构造月份向量做多步处理。
完整实现代码
1. 加载依赖包
library(tidyverse)
2. 构造示例测试数据
file_names <- c( "NHS%20Workforce%20Statistics%2C%20April%202018%20Organisation%20-%20Excel%20tables.xlsx", "NHS%20Workforce%20Statistics%2C%20September%202018%20Organisation.xlsx" )
3. 提取日期(两种可选方案)
方案1:先解码URL编码再提取(通用性更强,后续处理其他内容也方便)
result <- file_names %>% # 解码URL编码的特殊字符(把%20转为空格、%2C转为逗号,R默认加载的utils包自带该函数) map_chr(URLdecode) %>% # 直接匹配「英文月份+空格+4位年份」的组合 str_extract("(January|February|March|April|May|June|July|August|September|October|November|December)\\s+\\d{4}")
运行后result的输出即为:"April 2018" "September 2018",完全符合要求。
方案2:不解码直接匹配(步骤更少,仅针对当前场景)
result <- file_names %>% # 直接匹配编码后的日期格式,最后把%20替换为空格 str_extract("(January|February|March|April|May|June|July|August|September|October|November|December)(%20)+\\d{4}") %>% str_replace("%20", " ")
规则说明
正则里的月份列表已经覆盖了所有英文月份全称,年份部分用\\d{4}匹配任意4位数字,不限制为2018,后续年份更新也可以正常识别。
内容的提问来源于stack exchange,提问作者Sagar Jhamb
相关产品推荐
相关产品推荐

