R - 使用gsub()替换字符串

时间:2017-02-01 12:03:13

标签: r regex gsub

我的表格中有很多不干净的数据:

abc  
abc/def  
abc/de  
abc/d
abc/def/i j k
abc/def/i
abc/def/i j

这只是我想要改变的数据的一部分。这是更大的数据集的一部分。

我想将所有元素更改为abc/def/i j k。 我使用了gsub()函数,如下所示:

gsub('abc[a-z/]', 'abc/def/i j k', str)

输出

abc/def/i j k
abc/def/i j k/def
abc/def/i j k/de
abc/def/i j k/d

问题在于它取代了任何模式的出现。

我得到足够好结果的唯一解决方案是我硬编码所有可能的选项,如:

gsub('abc$|abc/d$|abc/de$|abc/def/i$', 'abc/def/i j k', str)

但是,如果任何新数据存在差异,这将无效。 所以我想知道是否有可能在不对参数进行硬编码的情况下得到结果。

1 个答案:

答案 0 :(得分:2)

您可以使用

x <- c("abc", "abc/def","abc/de","abc/d","abc/def/i j k","abc/def/i","abc/def/i j")
sub("^(abc)(?:/[^/]*)?", "\\1/def", x)
## => [1] "abc/def"       "abc/def"       "abc/def"       "abc/def"      
##    [5] "abc/def/i j k" "abc/def/i"     "abc/def/i j"

请参阅R demo

<强>详情:

  • ^ - 字符串开头
  • (abc) - 第1组:abc
  • (?:/[^/]*)? - 与以下序列匹配的可选组:
    • / - /
    • [^/]* - 除/
    • 以外的0个字符