某些模式后如何删除字符串或数字?

时间:2016-10-11 04:19:26

标签: r regex string-substitution

如果有一个矢量x,

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

有没有办法在'ad _'之后删除以下数字?

所以转换的x显示为

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

我试图使用gsub函数,但由于数字后跟'name'而无效。

2 个答案:

答案 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