我想在以下字符串中替换y,但如果它与%组合则不能。以下正则表达式适用于查找模式:
gsub(pattern = "([^%]y)", replacement = "*", "%x%xxxx_y_%y%y")
# [1] "%x%xxxx*_%y%y"
但是替换了两个字符(_y)而不是一个(y),正如我所期望的那样。 怎么了?
任何帮助表示赞赏! 安德里
答案 0 :(得分:3)
1)如图所示更改正则表达式中的括号,并对替换字符串进行相应的更改,如下所示:
gsub("([^%])y", "\\1", "%x%xxxx_y_%y%y")
## [1] "%x%xxxx__%y%y"
以下是正则表达式的可视化:
([^%])y
2)可以使用gsubfn完全使用正则表达式完成:
library(gsubfn)
gsubfn("([^%]y)", ~ substr(x, 1, 1), "%x%xxxx_y_%y%y")
## [1] "%x%xxxx__%y%y"
这是正则表达式的可视化:
([^%]y)
更新:添加了可视化效果。
答案 1 :(得分:1)
你可以试试正则表达式lookbehind
gsub("(?<=[^%])y", "", "%x%xxxx_y_%y%y", perl=TRUE)
#[1] "%x%xxxx__%y%y"
我们可以在regex101
查看(?<=[^%])y
答案 2 :(得分:0)