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

Regex 从R中的字符串中删除重复的子字符串,regex,string,r,Regex,String,R,是否有任何方法可以使用正则表达式(如gsub)或其他方法来消除字符串中的重复 基本上: a = c("abc, def, def, abc") f(a) #[1] "abc, def" 一个明显的方法是将线串起来,得到独特的线并将它们缝合在一起 paste0(unique(strsplit(a, ",[ ]*")[[1]]), collapse=", ") 一个明显的方法是将线串起来,得到独特的线并将它们缝合在一起 paste0(unique(strsplit(a, ",[ ]*")[[1]

是否有任何方法可以使用正则表达式(如gsub)或其他方法来消除字符串中的重复

基本上:

a = c("abc, def, def, abc")
f(a)
#[1] "abc, def"
一个明显的方法是将线串起来,得到独特的线并将它们缝合在一起

paste0(unique(strsplit(a, ",[ ]*")[[1]]), collapse=", ")
一个明显的方法是将线串起来,得到独特的线并将它们缝合在一起

paste0(unique(strsplit(a, ",[ ]*")[[1]]), collapse=", ")
您还可以使用stringr::str\u extract\u all

您还可以使用stringr::str\u extract\u all


您也可以基于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

您也可以基于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

我认为这应该符合我的目的。我会看看是否有其他的解决方案发布,但是谢谢。有没有办法用一个包含多个这样的字符串的向量来实现这一点?我认为这应该适合我的目的。我会看看是否有其他的解决方案发布,但是谢谢。有没有办法用一个包含多个这样的字符串的向量来实现这一点?