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

R - replacing strings using 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)

但是,如果任何新数据发生变化,这将不起作用。 所以我想知道是否可以在不对参数进行硬编码的情况下获得结果。

您可以使用

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+ 个字符