从R中的字符串中删除重复的子字符串

时间:2013-07-02 06:51:25

标签: regex string r

有没有办法(使用gsub或其他方法的正则表达式)从字符串中删除重复?

本质:

a = c("abc, def, def, abc")
f(a)
#[1] "abc, def"

3 个答案:

答案 0 :(得分:3)

一种显而易见的方法是strsplit字符串,获取unique字符串并将它们拼接在一起。

paste0(unique(strsplit(a, ",[ ]*")[[1]]), collapse=", ")

答案 1 :(得分:2)

您也可以使用stringr::str_extract_all

require(stringr)  
unique(unlist(str_extract_all(a, '\\w+')))

答案 2 :(得分:0)

您也可以使用基于gsub的此功能。我无法用一个正则表达式直接做到这一点。

f <- function(x) {
  x <- gsub("(.+)(.+)?\\1", "\\1\\2", x, perl=T)
  if (grepl("(.+)(.+)?\\1", x, perl=T))
    x <- f(x)
  else
    return(x)
}
b <- f(a)
b
[1] "abc, def"

HTH