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

如何在R中用str_extract()提取最后斜杠与.nc间的特定字符

解决方案

方法一:使用精准正则表达式

你之前写的正则(?=/).*(?=.nc)会匹配第一个斜杠之后到.nc之前的所有内容,所以才会包含中间的路径片段。要提取最后一个斜杠与.nc之间的文本,需要限定只匹配斜杠后的非斜杠字符,修正后的正则如下:

library(stringr)

a = c(
  'data/temp/air/pm2.5/pm2.5_year_2014.nc',
  'data/temp/air/pm10/pm10_year_2014.nc',
  'efcv/asdfe/weewr/rtrkhh/ss_fef_10233_dfdfe.nc'
)

str_extract(a, "(?<=/)[^/]+(?=\\.nc)")

运行结果:

[1] "pm2.5_year_2014"       "pm10_year_2014"        "ss_fef_10233_dfdfe"

正则逻辑说明:

  • (?<=/):正向后行断言,确保匹配内容的前一个字符是斜杠
  • [^/]+:匹配1个及以上非斜杠字符,刚好对应最后一个斜杠后的目标片段
  • (?=\\.nc):正向先行断言,确保匹配内容的后面紧跟.nc(.是正则特殊字符,需用\\转义)

方法二:用文件路径工具函数(无需正则)

如果是处理标准文件路径,用R自带的工具函数更直观:

library(tools)

# 先提取完整文件名(剥离前置路径)
basename(a)
# 再移除.nc后缀
file_path_sans_ext(basename(a))

运行结果和方法一完全一致,这种方法不需要写正则,更适合处理规范的文件路径场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:15:36