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

使用正则从R字符串向量提取下划线间内容失败,求助

解决方案

你的问题出在正则表达式的写法上——原正则里多余的空格导致无法匹配目标字符串,所以gsub找不到替换项,直接返回原向量。下面提供两种可靠的解决方法:

方法1:修正gsub的正则表达式

使用精准的正则匹配第一个下划线后、第二个下划线前的内容:

files <- c("./bNTI/bNTI_Yazoo_weighted.csv")
names <- gsub(".+_([^_]+)_.*", "\\1", files)
# 输出结果:"Yazoo"

正则解释:

  • .+_:匹配任意多个字符直到第一个下划线(包含下划线本身)
  • ([^_]+):捕获一个或多个非下划线的字符(这就是你要提取的目标内容)
  • _.*:匹配剩余的下划线及之后的所有字符
  • \\1:引用第一个捕获组的内容作为替换结果

方法2:使用stringr包(更直观)

stringr的str_extract函数可以直接提取符合规则的片段,无需替换:

library(stringr)
files <- c("./bNTI/bNTI_Yazoo_weighted.csv")
names <- str_extract(files, "(?<=_)[^_]+(?=_)")
# 输出结果:"Yazoo"

正则解释:

  • (?<=_):正向预查,确保目标内容前面是下划线(不包含下划线在匹配结果里)
  • [^_]+:匹配一个或多个非下划线字符
  • (?=_):正向预查,确保目标内容后面是下划线(不包含下划线在匹配结果里)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:17:05