我想在所有字母对(A-Z)和一组有限的数字(例如,2-5)之间插入下划线。我可以使用str_detect()
检测这个模式的存在,但是如果我想替换这些模式,我显然不能像下面那样使用正则表达式。
有没有办法维护x中的字母和数字,因为它们被str_replace_all(
)函数修改了?
我的目标是转换
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"
发布于 2018-04-11 11:10:32
我们可以捕获为一个组,并替换为捕获的组的反向引用
str_replace_all(substr(x, 1, 2), "^([A-Z])([2-5])", "\\1_\\2")
#[1] "B0" "B1" "B_2" "B_3" "BA"
https://stackoverflow.com/questions/49765854
复制相似问题