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

如何提取下划线分隔字符串中最后一个下划线前的内容?

解决方法

你使用的gsub("_.//*", "", x)正则语法错误,且逻辑不符合需求,所以没有生效。以下两种方法可以实现你想要的结果:

方法1:正则替换(gsub)

直接匹配最后一个下划线到.csv前的内容并替换,代码如下:

x <- "19970101_AM23_popu_223_AZ1_Country.csv"
result <- gsub("_[^_]+\\.csv$", ".csv", x)
# 输出结果:"19970101_AM23_popu_223_AZ1.csv"

正则解释:

  • _[^_]+:匹配一个下划线,以及后面任意数量的非下划线字符
  • \\.csv$:匹配字符串结尾的.csv后缀
  • 替换为.csv,相当于移除最后一个下划线到后缀前的多余内容

方法2:拆分合并(更稳妥)

先分离文件名和扩展名,再处理前缀部分,代码如下:

x <- "19970101_AM23_popu_223_AZ1_Country.csv"
# 提取扩展名
ext <- tools::file_ext(x)
# 提取不含扩展名的文件名前缀
prefix <- tools::file_path_sans_ext(x)
# 移除前缀中最后一个下划线后的内容
new_prefix <- gsub("_[^_]+$", "", prefix)
# 合并新前缀和扩展名
result <- paste0(new_prefix, ".", ext)

这种方法不受扩展名变化影响,适用性更广。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:05:22