Я хочу согласовать строки, заменив все завершающие X и Y символами подчеркивания. Поскольку длина этих строк варьируется, я написал следующее регулярное выражение, которое отлично работает. Однако первые два символа всегда должны оставаться такими, какие они есть. Я знаю, что могу использовать substr()
и paste0()
в качестве обходного пути, но как я могу включить это «не заменять первые два символа» в регулярное выражение?
x <- c("AXZ", "AZXYYX", "HZX_Y", "BXX", "XYX_")
# replaces all trailing X / Y
gsub("[XY](?=[XY_]*$)", "_", x, perl = TRUE)
#> [1] "AXZ" "AZ____" "HZ___" "B__" "____"
# blocks first character
gsub("(?<!^)[XY](?=[XY_]*$)", "_", x, perl = TRUE)
#> [1] "AXZ" "AZ____" "HZ___" "B__" "X___"
# desired output
c("AXZ", "AZ____", "HZ___", "BX_", "XY__")
#> [1] "AXZ" "AZ____" "HZ___" "BX_" "XY__"
Мне уже удалось исключить первая буква, поэтому я думаю, это должно быть легко исправить.