如果有一个向量x,即
x <- c('/name12/?ad_2','/name13/?ad_3','/name14/?ad_4')
有没有办法删除'ad_'之后的以下数字?
所以转换后的 x 显示为
'/name12/?ad_' '/name13/?ad_' '/name14/?ad_'
我试图使用gsub
功能,但由于数字后跟“名称”而无法正常工作。
如果有一个向量x,即
x <- c('/name12/?ad_2','/name13/?ad_3','/name14/?ad_4')
有没有办法删除'ad_'之后的以下数字?
所以转换后的 x 显示为
'/name12/?ad_' '/name13/?ad_' '/name14/?ad_'
我试图使用gsub
功能,但由于数字后跟“名称”而无法正常工作。
您可以使用正则表达式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个或更多(由于+
量词匹配一个或多个出现,尽可能多)$
- 字符串的结尾。由于前缀对于所有这些都是相同的长度:
x <- c('/name12/?ad_2','/name13/?ad_3','/name14/?ad_4')
substr(x,1,12)
[1] "/name12/?ad_" "/name13/?ad_" "/name14/?ad_"
否则我会grep
的。