如何删除特定模式后的字符串或数字?
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_"
图案详情:
_
- 匹配下划线
[0-9]+
- 1个或多个(由于+
量词匹配一个或多个出现,尽可能多)
$
- 字符串结尾。
如果存在向量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_"
图案详情:
_
- 匹配下划线[0-9]+
- 1个或多个(由于+
量词匹配一个或多个出现,尽可能多)$
- 字符串结尾。