【发布时间】:2020-07-11 07:32:28
【问题描述】:
我想通过用下划线替换所有尾随的 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__"
我已经设法排除了第一个字母,所以我想这应该很容易解决。
【问题讨论】:
标签: r regex regex-lookarounds gsub