2016-10-11 69 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它。

相关问题