在Go中使用正则表达式分割字符串

I'm really new to Go, and have been enjoying it so far. I'm trying to find a good way to split a string using a regular expression instead of a string. Thanks

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

If you just want to split on certain characters, you can use strings.FieldsFunc, otherwise I'd go with regexp.FindAllString.

You should be able to create your own split function that loops over the results of RegExp.FindAllString, placing the intervening substrings into a new array.

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

I made a regex-split function based on the behavior of regex split function in java, c#, php.... It returns only an array of strings, without the index information.

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
}

example:

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

result:

[a b c d]

The regexp.Split() function would be the best way to do this.

You can use regexp.Split to split a string into a slice of strings with the regex pattern as the delimiter.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    txt := "Have9834a908123great10891819081day!"

    split := re.Split(txt, -1)
    set := []string{}

    for i := range split {
        set = append(set, split[i])
    }

    fmt.Println(set) // ["Have", "a", "great", "day!"]
}