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

用R中的regexp替换精确字符串匹配,regex,r,replace,gsub,Regex,R,Replace,Gsub,我有一个需要清理的字符串向量。 我已经能够自己清理很多了,但有一点我有问题 有些弦有链子“@56;”开始时(数字不同)。所以一个字符串可以是'@56;裤子"或"897";;裤子 我想让它像“裤子”一样 我编写了以下代码: gsub("[@[:digit:];]", "", 'mystring') 但它在以下情况下失败: gsub("[@[:digit:];]", "", '@34skirt') # returns 'skirt' 我希望它在本例中返回“@34shirt”,因为;从结尾就

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

有些弦有链子“@56;”开始时(数字不同)。所以一个字符串可以是'@56;裤子"或"897";;裤子 我想让它像“裤子”一样

我编写了以下代码:

gsub("[@[:digit:];]", "", 'mystring')   
但它在以下情况下失败:

gsub("[@[:digit:];]", "", '@34skirt') # returns 'skirt'
我希望它在本例中返回“@34shirt”,因为;从结尾就不见了

我想要一个完全匹配的。有什么办法吗?
我尝试添加\但它不起作用,
[@[:digit:];]
正则表达式与单个字符匹配,该字符要么是
@
,要么是数字,要么是
。因此,它将删除字符串中任何位置的那些,删除次数与使用
gsub
找到它们的次数相同

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

@[0-9]+;

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

^@[0-9]+;
:


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

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

@[0-9]+;

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

^@[0-9]+;
:

我们可以试试

sub("@\\d+;", "", v1)
#[1] "mystring" "@34skirt" "trousers" "trousers"
数据
v1我们可以试试

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