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

