我希望这与之前的帖子有足够的不同,以证明自己的线索;不幸的是,他们对我没有任何帮助。我认为我对部分替换的兴趣, 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()
,但我会讨厌自己,如果这就是我的定位。
答案 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位或更多位数)$
- 字符串结束。