2013-08-31 85 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