2017-09-18 81 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位或更多位)
  • $ - 字符串結尾。