用R中的正则表达式替换精确的字符串匹配

replace exact string match with regexp in R

我有一个需要清理的字符串向量。 我已经能够自己清理很多东西了,但有一件事我遇到了问题。

有些字符串有链 '@56;'在开头(数字不同)。所以字符串可以是 '@56;trousers' 或 '@897;trousers' 我想像 'trousers'.

一样保留它

我写了下面的代码:

gsub("[@[:digit:];]", "", 'mystring')   

但在以下情况下会失败:

gsub("[@[:digit:];]", "", '@34skirt') # returns 'skirt'

在这种情况下,我希望 return '@34skirt' 因为 ;结尾少了

我想要完全匹配。关于如何做到这一点的任何想法? 我已经尝试添加 \ 但它不起作用

[@[:digit:];] 正则表达式匹配单个字符,可以是 @、数字或 ;。因此,它将删除字符串中任何位置的那些,与使用 gsub.

找到它们的次数一样多

您可以使用正则表达式定义要删除的 字符序列 ,而不是字符 class:

@[0-9]+;

regex demo

您甚至可以告诉正则表达式引擎仅删除字符串开头的那些:

^@[0-9]+;

Sample demo:

sub("^@[0-9]+;", "", '@34skirt')     ## [1] "@34skirt"
sub("^@[0-9]+;", "", '@34;trousers') ## [1] "trousers"

我们可以试试

sub("@\d+;", "", v1)
#[1] "mystring" "@34skirt" "trousers" "trousers"

数据

v1 <- c('mystring', '@34skirt',  '@56;trousers', '@897;trousers')