2013-08-31 16 views
6

ढूँढना दोहराए सबस्ट्रिंग

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

के रूप में कुछ मनमाने ढंग से स्ट्रिंग इस तरह मैं किसी भी तरह दोहराव सबस्ट्रिंग रिक्त स्थान (संपादित) द्वारा सीमांकित मिल सकता है हो रही है? इस मामले में यह 'हैलो', 'मैं हूं' और 'स्ट्रिंग' होगा।

मैं कुछ समय के लिए इस बारे में सोच रहा हूं लेकिन मुझे अभी भी कोई वास्तविक समाधान नहीं मिल रहा है। मैंने इस विषय से संबंधित कुछ लेख भी पढ़े हैं और प्रत्यय पेड़ों पर हिट किया है, लेकिन यह मेरी मदद कर सकता है भले ही मुझे हर दोहराव की आवश्यकता हो। पुनरावृत्ति दो से अधिक की गणना के साथ?

यदि ऐसा है, तो क्या पाइथन के लिए कुछ लाइब्रेरी है, जो प्रत्यय पेड़ों को संभाल सकती है और उन पर संचालन कर सकती है?

संपादित करें: मुझे खेद है कि मैं पर्याप्त स्पष्ट नहीं था। तो बस इसे स्पष्ट करने के लिए - मैं दोहराव वाले उप-तारों की तलाश में हूं, जिसका मतलब है स्ट्रिंग में अनुक्रम, उदाहरण के लिए, नियमित अभिव्यक्तियों के संदर्भ में + या {} वाइल्डकार्ड द्वारा प्रतिस्थापित किया जा सकता है। मैं सूचीबद्ध स्ट्रिंग से नियमित अभिव्यक्ति बनाने के लिए होता है तो, मैं

(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,} गैर लालची बना देता हूं अन्यथा यह "ए ए" में "ए" से मेल खाता है। – jaytea

+0

दाएं। जैसा कि है, यह "स्ट्रिंग स्ट्रिंग" से मेल खाता है, न कि "स्ट्रिंग" –

+0

वाह, जादू की तरह काम करता है! आपके उत्तर को स्वीकार करने से ठीक पहले, क्या आप नियमित अभिव्यक्ति को थोड़ा सा समझाते हैं? मैं समझता हूं कि हमारे पास क्यों है (। {2,}?), लेकिन निम्नलिखित ब्रैकेट? "?:" का मतलब याद नहीं है, \ s + पर्याप्त स्पष्ट है लेकिन \ 1? क्या यह कहता है "समूह संख्या से जो मिला है उसे ले लो1 और इसे फिर से ढूंढें? " – Jendas

संबंधित मुद्दे