我想在所有字母(A-Z)和一组有限的数字(例如2-5)之间插入下划线。我可以使用str_detect()
检测到这种模式的存在,但如果我想替换这些模式,我显然不能使用正则表达式,因为我在下面尝试。
是否可以通过str_replace_all(
)函数修改x中的字母和数字?
我的目标是转换
old <- c("B0", "B1", "B2", "B3", "BA4")
new <- c("B0", "B1", "B_2", "B_3", "BA")
我试过了:
library(dplyr)
library(stringr)
x <- c("B0", "B1", "B2", "B3", "BA4")
str_detect(x, "^[A-Z][2-5]")
str_replace_all(x, "^[A-Z][2-5]", "[A-Z]_[2-5]")
[1] FALSE FALSE TRUE TRUE FALSE
[1] "B0" "B1" "[A-Z]_[2-5]" "[A-Z]_[2-5]" "BA4"
答案 0 :(得分:3)
我们可以作为一个组捕获并替换为捕获组的反向引用
str_replace_all(substr(x, 1, 2), "^([A-Z])([2-5])", "\\1_\\2")
#[1] "B0" "B1" "B_2" "B_3" "BA"