2010-12-16 169 views

回答

8

如果你只是想分割某些字符,你可以使用strings.FieldsFunc,否則我會用regexp.FindAllString去。

+0

我試過這個,但它覆蓋了我想分割的字符。我不想失去角色,只需插入空格。我使用了for循環來達到我的目標。謝謝。 PS - 你的回答不包括正則表達式,也許這就是爲什麼有一個投票? – Brenden 2013-11-15 09:45:40

+0

沒有什麼會被「覆蓋」,這只是返回的問題。如果你喜歡,你總是可以使用不同的正則表達式函數來獲取索引並使用它們。 – 2014-01-24 23:33:37

13

我根據java,c#,php ....中的正則表達式分割函數的行爲做了一個正則表達式分割函數。它僅返回一個沒有索引信息的字符串數組。

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

看起來像[在Go 1.1中添加](https://golang.org/doc/go1.1)([2013年5月](https://golang.org/doc/devel/release.html#go1)。 1))。 – n8henrie 2017-07-15 15:17:07

相關問題