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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:43:10