R gsub部分替换通配符

时间:2017-09-18 20:10:14

标签: r wildcard gsub partial capture

我希望这与之前的帖子有足够的不同,以证明自己的线索;不幸的是,他们对我没有任何帮助。我认为我对部分替换的兴趣, plus 使用通配符是非常独特的,但如果我没有仔细搜索或仔细阅读,我会道歉!

假设我有以下字符串:

str <- c("FOO_1", "FOO_2", "BAR_1", "BAR_2")

我想用其他内容替换1末尾的FOO_1,例如A。我试图用两个

这样做
gsub("[^F.*](1)$", "\\_A", str)

gsub("^F.*(1)$", "\\_BLAH", str)

但很明显,他们都没有努力取代 1,其余的FOO_保持原样,同时也没有改变BAR_1。我有一个愚蠢的解决方案,只涉及一行grep()和一行gsub(),但我会讨厌自己,如果这就是我的定位。

1 个答案:

答案 0 :(得分:2)

  

我只想将带有FOO结尾的变量开始替换为1

FOO及其后的所有内容捕获到第1组,然后在字符串末尾匹配_1。然后,在替换模式中,使用对Group1值的替换反向引用:

str <- c("FOO_1", "FOO_2", "BAR_1", "BAR_2")
sub("^(FOO.*)_1$", "\\1_A", str)
## => [1] "FOO_A" "FOO_2" "BAR_1" "BAR_2"

请参阅this R demo

如果必须匹配字符串末尾的任何数字金额,请将1替换为\\d+

<强>详情

  • ^ - 字符串开始
  • (FOO.*) - FOO子字符串,然后是任意0+字符,尽可能多
  • _1 - _1子字符串(如果您将1替换为\\d+,则会匹配1位或更多位数)
  • $ - 字符串结束。