2016-10-11 104 views
1

如果有一個向量x就是如何在特定模式後刪除字符串或數字?

x <- c('/name12/?ad_2','/name13/?ad_3','/name14/?ad_4') 

有沒有辦法刪除「ad_」後,下面的數字?

所以轉換的X顯示爲

'/name12/?ad_' '/name13/?ad_' '/name14/?ad_' 

我試圖用gsub功能,但它並沒有因爲數字其次是「名」的工作。

+2

嘗試'gsub(「_ \\ d」,「_」,x)' –

+0

當您嘗試使用'gsub'功能時,您做了什麼? –

回答

1

您可以使用帶有sub的正則表達式(因爲您執行單個搜索和替換,您不需要gsub)並根據需要在結果中包含或排除的內容使用模式。

您可以使用"(\\?ad_)[0-9]+$"刪除?ad_ +數字與"\\1"替換恢復?ad_值,或者只是匹配_,然後數字(與_替換)。

見演示代碼:

> x <- c('/name12/?ad_2','/name13/?ad_3','/name14/?ad_4') 
> sub("(\\?ad_)[0-9]+$", "\\1", x) 
[1] "/name12/?ad_" "/name13/?ad_" "/name14/?ad_" 
> sub("_[0-9]+$", "_", x) 
[1] "/name12/?ad_" "/name13/?ad_" "/name14/?ad_" 

參見regex demo

圖案的詳細資料

  • _ - 匹配下劃線
  • [0-9]+ - 1以上(由於量詞匹配一個或多個匹配項,儘可能多)
  • $ - 字符串的結尾。
0

由於前綴是它們全部具有相同的長度:

x <- c('/name12/?ad_2','/name13/?ad_3','/name14/?ad_4') 

substr(x,1,12) 

[1]? 「/ name12/ad_」 「/ name13/ad_」 「?/ name14/ad_」

否則我會grep它。

相關問題