在R语言中从带路径的文件名提取指定子串的问题求助
解决R语言正则表达式提取字符串问题
问题分析
你需要从Windows文件路径中提取特定子串,核心是匹配以字母开头、以_1_DN结尾的目标片段,同时适配不同格式的文件名(如包含航次号、站位号等前缀)。
解决方案
我们可以分两步处理:先剥离文件路径和扩展名,再用精准正则匹配目标子串:
files = c("G:\\Conservation\\Monitoring\\Conditions physico-chimiques\\CTD\\CODES_R\\Data\\CTD_parc_marin\\2009\\odf\\CTD_2009099_BSM2AMONT_1_DN.ODF", "G:\\Conservation\\Monitoring\\Conditions physico-chimiques\\CTD\\CODES_R\\Data\\CTD_parc_marin\\2011\\odf\\CTD_2011PSSL_42_1_DN.ODF", "G:\\Conservation\\Monitoring\\Conditions physico-chimiques\\CTD\\CODES_R\\Data\\CTD_parc_marin\\2011\\odf\\CTD_2011PSSL_10_1_DN.ODF", "G:\\Conservation\\Monitoring\\Conditions physico-chimiques\\CTD\\CODES_R\\Data\\CTD_parc_marin\\2022\\odf\\CTD_2022PSSL_202201017ESTMARAVAL_1_DN.odf") # 1. 剥离路径和扩展名,获取纯文件名 library(tools) file_stems <- file_path_sans_ext(basename(files)) # 2. 用正则提取目标子串:匹配以字母开头、以_1_DN结尾的片段 pattern <- sub(".*([A-Z][A-Z0-9]*(_\\d+)?_1_DN)$", "\\1", file_stems) print(pattern)
输出结果
[1] "BSM2AMONT_1_DN" "PSSL_42_1_DN" "PSSL_10_1_DN" "ESTMARAVAL_1_DN"
正则说明
.*: 贪婪匹配文件名中目标片段之前的所有内容([A-Z][A-Z0-9]*(_\\d+)?_1_DN): 捕获目标片段:[A-Z][A-Z0-9]*: 匹配以字母开头的站位代码(允许包含数字)(_\\d+)?: 可选的站位序号(如_42、_10)_1_DN: 固定后缀
$: 确保匹配到字符串末尾,保证捕获的是最后一个符合规则的片段(适配第四个文件的特殊格式)
内容的提问来源于stack exchange,提问作者Pierre-Alexandre Dumas
相关产品推荐
相关产品推荐

