如果有一个矢量x,
x <- c('/name12/?ad_2','/name13/?ad_3','/name14/?ad_4')
有没有办法在'ad _'之后删除以下数字?
所以转换的x显示为
'/name12/?ad_' '/name13/?ad_' '/name14/?ad_'
我试图使用gsub
函数,但由于数字后跟'name'而无效。
答案 0 :(得分: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个或更多(由于+
量词匹配一个或多个匹配项,尽可能多)$
- 字符串的结尾。答案 1 :(得分:0)
由于前缀与所有前缀的长度相同:
x <- c('/name12/?ad_2','/name13/?ad_3','/name14/?ad_4')
substr(x,1,12)
[1]&#34; / name12 /?ad _&#34; &#34; / name13 /广告_&#34; &#34;?/ name14 /广告_&#34;
否则我会grep
。