R gsub 部分替换通配符

R gsub partial replacement wildcards

我希望这是足够不同的相关,之前的帖子来证明它自己的主题;不幸的是,他们对我没有帮助。我认为我对部分替换的兴趣 plus 通配符的使用迄今为止是独一无二的,但如果我没有足够仔细地搜索或阅读,我深表歉意!

假设我有以下字符串:

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

我想用其他东西替换 FOO_1 末尾的 1,比如 A。我尝试同时使用

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

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

但很明显它们都没有取代 只有 1FOO_ 的其余部分完好无损,同时也没有改变 BAR_1 .对于这个问题,我有一个愚蠢的解决方案,它只涉及一行 grep() 和一行 gsub(),但如果我就这样解决,我会讨厌自己的。

I only want to replace variables starting with FOO and ending with 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 个或多个数字)
  • $ - 字符串结尾。