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

如何移除R语言中指定模式前的所有下划线?

R语言移除指定模式前的所有下划线

tidyverse 方案

可以使用stringr包的字符串处理函数,两种实现方式可选:

方式1:分割拼接法

先按指定模式_test分割字符串,移除前半部分的所有下划线后重新拼接:

library(stringr)

x <- c("a_b_test_1", "a_b_c_test_2")
# 按_test分割为前后两部分
split_parts <- str_split_fixed(x, "_test", n = 2)
# 移除前半部分下划线,拼接完整字符串
result <- str_c(str_remove_all(split_parts[, 1], "_"), "_test", split_parts[, 2])

result
#> [1] "ab_test_1"  "abc_test_2"

方式2:正则正向预查法

用正则表达式匹配所有出现在_test之前的下划线,直接替换为空:

library(stringr)

x <- c("a_b_test_1", "a_b_c_test_2")
result <- str_replace_all(x, "_(?=.*_test)", "")

result
#> [1] "ab_test_1"  "abc_test_2"

这里_(?=.*_test)是正向预查规则,仅匹配后续还会出现_test的下划线,精准定位需要移除的目标。

base R 方案

无需额外包,用基础函数也能实现:

方法1:分割拼接法

通过strsplit分割字符串,再处理前半部分的下划线后拼接:

x <- c("a_b_test_1", "a_b_c_test_2")
result <- sapply(strsplit(x, "_test", fixed = TRUE), function(parts) {
  paste0(gsub("_", "", parts[1]), "_test", parts[2])
})

result
#> [1] "ab_test_1"  "abc_test_2"

方法2:正则表达式法

启用Perl风格正则的正向预查,一行代码完成替换:

x <- c("a_b_test_1", "a_b_c_test_2")
result <- gsub("_(?=.*_test)", "", x, perl = TRUE)

result
#> [1] "ab_test_1"  "abc_test_2"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:53:14