2010-12-16 132 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

相关问题