用R中的regexp替换精确的字符串匹配

时间:2016-02-22 09:52:09

标签: regex r replace gsub

我有一个需要清洁的字符串向量。 我已经能够自己清理它了很多但是我遇到了一件事。

有些字符串有链' @ 56;'在开始时(数字不同)。所以字符串可以是' @ 56;裤子'或者' @ 897;裤子' 我想把它留在裤子上。

我写了以下代码:

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

但在以下情况下失败:

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

我希望它回归' @ 34skirt'在这种情况下,因为;最后遗漏了。

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

2 个答案:

答案 0 :(得分:2)

[@[:digit:];]正则表达式匹配单个字符@,数字或;。因此,它将删除字符串中任何位置的那些,与gsub找到它们的次数相同。

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

@[0-9]+;

请参阅regex demo

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

^@[0-9]+;

Sample demo

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

答案 1 :(得分:2)

我们可以尝试

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

数据

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