2017-09-18 132 views
1

我希望这是足够不同的相关,先前的职位来证明自己的线程;不幸的是,他们对我毫无帮助。我认为我对部分替换的兴趣,对通配符的使用是独一无二的,但是,如果我根本没有足够仔细地搜索或仔细阅读,我会表示歉意!R gsub部分替换通配符

假设我有以下字符串:

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

我想在FOO_1用别的东西到底要更换1,说A。我试图与这两个

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

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

这样做,但很明显,他们都不工作,以取代1,留下其余FOO_完好,同时不改变BAR_1。我有一个愚蠢的解决方案,只涉及一行grep()和一行gsub(),但如果这就是我所解决的问题,我会恨自己。

+1

这里的规则是什么?只需在字符串末尾替换_1即可? 'sub(“_ 1 $”,“_A”,x)'?看看[这个演示](https://ideone.com/mKj7Uh) - 你在找什么? –

+0

不幸的是,没有;我只想用'FOO'替换变量_starting_并用'1'替换_ending_。因此,例如,如果方法将“BAR_1”更改为“BAR_A”,那就是失败。 我只是试图提供一个最小的工作示例,但在实际情况下,有几个相同的变量排列。例如。,“FOO_A_1”,“FOO_B_1”等;我想要捕获所有'^ FOO。* 1 $'(对不起,如果这是不正确的陈述)。 – ironchefsakai

+1

['sub(“^(FOO。*)_1 $”,“\\ 1_A”,str)'](https://ideone.com/Nxqsi9)? –

回答

1

我只想与1

捕捉FOO和之后的所有FOO结束更换变量开始到第1组,只是在字符串的结尾匹配_1。然后,在替换模式中,使用一个替代反向引用的组别1值:

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参见

如果在字符串的末尾任何数字量必须匹配,与\\d+替换1

详细

  • ^ - 字符串开头
  • (FOO.*) - FOO子,然后任何0+字符,尽可能多的
  • _1 - 一个_1子(如果你有\\d+替换1 ,它将匹配1位或更多位)
  • $ - 字符串结尾。