【发布时间】:2014-09-29 10:24:33
【问题描述】:
我正在尝试使用 R 中的 grep 和 gsub 命令来查找字符串中的重复块。例如,我可能有这样的东西......
z <- c("ab;cd;ef;gh;ij;kl;mn;mn;", "ab;cd;ef;gh;ij;kl;op;")
我想识别在分号之间具有重复子字符串的字符串。所以在这种情况下,我想取回 z[1],也许稍后将其更改为“ab;cd;ef;gh;ij;kl;mn;”。我知道我可以使用 gsub 中的内存插槽来做类似的事情......
gsub("(.*mn;).*;", "\\1", z)
但是当我不知道重复在哪里或重复的子字符串是什么时,这将不起作用。我想做的是这样的......
gsub(";([^;]*;)\\1;", "\\1", z)
要制作这个...
[1] "ab;cd;ef;gh;ij;kl;mn;" "ab;cd;ef;gh;ij;kl;op;"
想法?
【问题讨论】:
-
像
lapply(strsplit(z,";"),anyDuplicated)这样的东西肯定会帮助你做你想做的事...... -
只使用
gsub的好答案发生了什么:我认为它类似于gsub("([^;]*;)\\1;?", "\\1", z)? -
@VincentGuillemot,这是正确的解决方案,将其作为答案发布
-
@VincentGuillemot 和每个人 - 你是对的 - 我搞砸了正则表达式,因为我预计模式中有两个
;。 -
我不能相信这个答案:它是在几分钟前发布的,但神秘地消失了。甚至还有一个demo here。我刚刚添加了“?”...