गो

2010-12-16 16 views
12

में नियमित अभिव्यक्ति का उपयोग करके स्प्लिट स्ट्रिंग मैं वास्तव में जाने के लिए नया हूं, और अब तक इसका आनंद ले रहा हूं। मैं एक स्ट्रिंग के बजाय नियमित अभिव्यक्ति का उपयोग करके एक स्ट्रिंग को विभाजित करने का एक अच्छा तरीका खोजने की कोशिश कर रहा हूं। धन्यवादगो

http://nsf.github.com/go/strings.html?f:Split!

उत्तर

8

यदि आप केवल कुछ वर्णों पर विभाजित करना चाहते हैं, तो आप strings.FieldsFunc का उपयोग कर सकते हैं, अन्यथा मैं regexp.FindAllString के साथ जाऊंगा।

+0

मैंने कोशिश की, लेकिन यह उस चरित्र को ओवरराइट करता है जिसे मैं विभाजित करना चाहता हूं। मैं चरित्र खोना नहीं चाहता, बस एक जगह डालें। मैंने अपने लक्ष्य पर जाने के लिए लूप का इस्तेमाल किया। धन्यवाद। पीएस - आपके उत्तर में रेगेक्स शामिल नहीं था, शायद यही कारण है कि नीचे वोट है? – Brenden

+0

कुछ भी "अधिलेखित" नहीं हो रहा है, यह सिर्फ एक प्रश्न है कि क्या लौटाया गया था। यदि आप चाहें, तो सूचकांक प्राप्त करने और उनका उपयोग करने के लिए आप हमेशा एक अलग regexp फ़ंक्शन का उपयोग कर सकते हैं। –

1

आप अपने स्वयं के विभाजन समारोह को बनाने में सक्षम होना चाहिए जो RegExp.FindAllString के परिणामों पर लूप करता है, हस्तक्षेप करने वाले सबस्ट्रिंग को एक नई सरणी में रखता है।

http://nsf.github.com/go/regexp.html?m:Regexp.FindAllString!

+1

यह सुनिश्चित नहीं है कि आपको 'RegExp' कहां से मिला, लेकिन सही पैकेज नाम' regexp' है। जाओ केस-संवेदी है! –

13

मैंने जावा, सी #, पीएचपी में रेगेक्स स्प्लिट फ़ंक्शन के व्यवहार के आधार पर एक रेगेक्स-स्प्लिट फ़ंक्शन बनाया .... यह इंडेक्स जानकारी के बिना केवल तारों की एक सरणी देता है।

func RegSplit(text string, delimeter string) []string { 
    reg := regexp.MustCompile(delimeter) 
    indexes := reg.FindAllStringIndex(text, -1) 
    laststart := 0 
    result := make([]string, len(indexes) + 1) 
    for i, element := range indexes { 
      result[i] = text[laststart:element[0]] 
      laststart = element[1] 
    } 
    result[len(indexes)] = text[laststart:len(text)] 
    return result 
} 

उदाहरण:

fmt.Println(RegSplit("a1b22c333d", "[0-9]+")) 

परिणाम:

[a b c d] 
5

regexp.Split() समारोह यह करने के लिए सबसे अच्छा तरीका होगा।

+0

ऐसा लगता है [गो 1.1 में जोड़ा गया] [https://golang.org/doc/go1.1) ([मई 2013] (https://golang.org/doc/devel/release.html#go1। 1))। – n8henrie