用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]+;
您甚至可以告诉正则表达式引擎仅删除字符串开头的那些:
^@[0-9]+;
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')
我有一个需要清理的字符串向量。 我已经能够自己清理很多东西了,但有一件事我遇到了问题。
有些字符串有链 '@56;'在开头(数字不同)。所以字符串可以是 '@56;trousers' 或 '@897;trousers' 我想像 'trousers'.
一样保留它我写了下面的代码:
gsub("[@[:digit:];]", "", 'mystring')
但在以下情况下会失败:
gsub("[@[:digit:];]", "", '@34skirt') # returns 'skirt'
在这种情况下,我希望 return '@34skirt' 因为 ;结尾少了
我想要完全匹配。关于如何做到这一点的任何想法? 我已经尝试添加 \ 但它不起作用
[@[:digit:];]
正则表达式匹配单个字符,可以是 @
、数字或 ;
。因此,它将删除字符串中任何位置的那些,与使用 gsub
.
您可以使用正则表达式定义要删除的 字符序列 ,而不是字符 class:
@[0-9]+;
您甚至可以告诉正则表达式引擎仅删除字符串开头的那些:
^@[0-9]+;
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')