我有一个需要清洁的字符串向量。 我已经能够自己清理它了很多但是我遇到了一件事。
有些字符串有链' @ 56;'在开始时(数字不同)。所以字符串可以是' @ 56;裤子'或者' @ 897;裤子' 我想把它留在裤子上。
我写了以下代码:
gsub("[@[:digit:];]", "", 'mystring')
但在以下情况下失败:
gsub("[@[:digit:];]", "", '@34skirt') # returns 'skirt'
我希望它回归' @ 34skirt'在这种情况下,因为;最后遗漏了。
我想要完全匹配。关于如何做到这一点的任何想法? 我试图添加\并且它不起作用
答案 0 :(得分:2)
[@[:digit:];]
正则表达式匹配单个字符@
,数字或;
。因此,它将删除字符串中任何位置的那些,与gsub
找到它们的次数相同。
您可以使用定义序列字符的正则表达式来删除,而不是字符类:
@[0-9]+;
请参阅regex demo
您甚至可以告诉正则表达式引擎仅删除字符串开头的那些:
^@[0-9]+;
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')