如何删除特定模式后的字符串或数字?

How to delete string or digits after certain pattern?

如果存在向量x即

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

有没有办法删除'ad_'后面的号码?

因此转换后的 x 显示为

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

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

因为所有前缀的长度都相同:

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

substr(x,1,12)

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

否则我会grep它。

您可以使用带 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个或多个(由于+量词匹配一个或多个出现,尽可能多)
  • $ - 字符串结尾。