2013-08-31 89 views
6

具有如查找重复子

hello hello hello I am I am I am your string string string string of strings 

这样的一些任意字符串我可以以某种方式找到空间(EDIT)分隔重复子?在这种情况下,它会是'你好','我是'和'串'。

我一直想知道这一段时间,但我仍然找不到任何真正的解决方案。 我也读过一些关于这个主题的文章,并打到后缀树上,但是这可以帮助我,尽管我需要找到每个重复例如重复次数高于两次?

如果是这样,是否有一些python库,可以处理后缀树并对它们执行操作?

编辑:对不起,我不够清楚。所以只是为了说清楚 - 我正在寻找重复的子字符串,这意味着字符串中的序列,例如,就正则表达式而言,可以用+或{}通配符替换。所以,如果我将不得不作出从列出的字符串的正则表达式,我会做

(hello){3}(I am){3}your (string){4}of strings 
+0

可能重复( http://stackoverflow.com/questions/11090289/find-longest-repetitive-sequence-in-a-string) – fsw

+0

我认为这样。在发布之前,我已经阅读过这个问题,但我没有提出任何想法,如何将解决方案转换为适合我的问题。 – Jendas

+0

的确,我只关注我真正想要的输出。对于那个很抱歉。 – Jendas

回答

3

要查找重复两次以上两个或多个字符,每一个用空格分隔,使用:

(.{2,}?)(?:\s+\1)+ 

下面是你的测试字符串的一个工作示例:http://bit.ly/17cKX62

编辑:使捕获组中的量词不情愿加入?匹配最短的匹配(即现在匹配“字符串”,而不是“串串”)

编辑2:增加对清洁结果所需的空间分隔符

的[查找字符串中的最长的重复序列]
+1

适用于他的案例,但我会使{2,}非贪婪,否则它将匹配“a a a b”中的“a”。 – jaytea

+0

没错。因为它是匹配“字符串”,而不是“字符串” –

+0

哇,像魔术一样工作!就在我接受你的答案之前,你介意一点点解释正则表达式吗?我明白为什么我们有(。{2,}?),但下面的括号? “?:”意思是不记得,\ s +足够清楚,但\ 1?这是否说:“你从团队号码中找到了什么?1,并再次找到它?“ – Jendas