如何提取下划线分隔字符串中最后一个下划线前的内容?
解决方法
你使用的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
相关产品推荐
相关产品推荐

