繁体   English   中英

用R中的regexp替换完全匹配的字符串

[英]replace exact string match with regexp in R

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

有些字符串的链为“ @ 56;”。 开头(数字有所不同)。 因此,字符串可以是“ @ 56;裤子”或“ @ 897;裤子”,我想像“裤子”一样保留它。

我写了以下代码:

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

但在以下情况下失败:

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

我想在这种情况下返回'@ 34skirt',因为 从最后开始消失了。

我要完全匹配。 有关如何执行此操作的任何想法? 我试着添加\\,但是它不起作用

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

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

@[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') 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM