使用正则表达式灵活地修改字符串

时间:2018-04-11 03:06:59

标签: r regex stringr

我想在所有字母(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" 

1 个答案:

答案 0 :(得分:3)

我们可以作为一个组捕获并替换为捕获组的反向引用

str_replace_all(substr(x, 1, 2), "^([A-Z])([2-5])", "\\1_\\2")
#[1] "B0"  "B1"  "B_2" "B_3" "BA"