1

如果有一个向量x,即

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

有没有办法删除'ad_'之后的以下数字?

所以转换后的 x 显示为

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

我试图使用gsub功能,但由于数字后跟“名称”而无法正常工作。

4

2 回答 2

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_"

查看正则表达式演示

图案细节

  • _- 匹配下划线
  • [0-9]+- 1个或更多(由于+量词匹配一个或多个出现,尽可能多)
  • $- 字符串的结尾。
于 2016-10-11T06:21:16.497 回答
0

由于前缀对于所有这些都是相同的长度:

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

substr(x,1,12)

[1] "/name12/?ad_" "/name13/?ad_" "/name14/?ad_"

否则我会grep的。

于 2016-10-11T04:58:12.250 回答