2015-02-22 7 views
5

मेरे पास एक स्ट्रिंग है - उदाहरण के लिए, "हैलो वर्ल्ड"। ध्यान दें कि "आर" पत्र दो बार दोहराता है।लुकहेड नियमित अभिव्यक्ति - लगातार अक्षरों को डुप्लिकेट करें

मैं उन अक्षरों की पहचान करना चाहता हूं जो लगातार (दो या दो बार) होते हैं और उनमें से केवल एक को बनाए रखते हैं। यही है, मैं एक "आर" के साथ "हैलो वर्ल्ड" प्राप्त करना चाहता हूं।

गोलांग नियमित रूप से अभिव्यक्ति की प्रतीत नहीं कर रहा है।

मैं निम्नलिखित नियमित अभिव्यक्ति का उपयोग कर पत्र है कि लगातार दोहराने की पहचान करने की कोशिश की -

r := regexp.Compile(`(.)\1`) 

लेकिन यह दोनों पत्र की घटनाओं का चयन करता है - मैं उनमें से केवल एक का चयन किया जाना चाहते हैं।

+0

तुम भी '' Hello' बनने के लिए Helo' चाहेगा , सही? 'Vooorrrrrld' को पकड़ने के लिए भी अभिव्यक्ति '(।) \ 1 +' होना चाहिए। – dasblinkenlight

+0

ओह हाँ। सही बात। उम्मीद है कि लगातार दोहराए जाने वाले सभी अक्षरों की पहचान करें और केवल इसमें से एक को बनाए रखें। – callmekatootie

+0

मैं रेगेक्स लाइब्रेरी में जाने से परिचित नहीं हूं, इसलिए मुझे नहीं पता कि यह कैसे किया जाता है, लेकिन पहले कैप्चरिंग समूह को पुनर्प्राप्त करने का एक तरीका होना चाहिए, जो कि कोष्ठक में डॉट से मेल खाता है। पूरी अभिव्यक्ति, जो कि कई रेगेक्स कार्यान्वयन समूह शून्य से मेल खाती है, सभी समान अक्षरों से मेल खाती है, लेकिन पहला कैप्चरिंग समूह केवल पहला अक्षर होगा। – dasblinkenlight

उत्तर

5

आप PCRE बाइंडिंग का उपयोग कर सकता है, फिर भी अगर आप सिर्फ उदाहरण के लिए, आप strings.Map इस्तेमाल कर सकते हैं dup पत्र निकालना चाहते हैं:

func stripDups(s string) string { 
    var last rune 
    return strings.Map(func(r rune) rune { 
     if r != last { 
      last = r 
      return r 
     } 
     return -1 
    }, s) 
} 

playground

+1

सुंदर। अपेक्षित के रूप में काम करता है। उनमें से केवल एक को बनाए रखने के लगातार डुप्लिकेट अक्षरों को हटा देता है। – callmekatootie

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