我对Go非常陌生,至今一直享受它。我试图找到一种很好的方法来使用正则表达式而不是字符串来分割字符串。谢谢在Go中使用正则表达式分割字符串
http://nsf.github.com/go/strings.html?f:Split!
我对Go非常陌生,至今一直享受它。我试图找到一种很好的方法来使用正则表达式而不是字符串来分割字符串。谢谢在Go中使用正则表达式分割字符串
http://nsf.github.com/go/strings.html?f:Split!
如果你只是想分割某些字符,你可以使用strings.FieldsFunc
,否则我会用regexp.FindAllString
去。
您应该可以创建自己的拆分函数,循环遍历RegExp.FindAllString的结果,将干预子串放置到新数组中。
http://nsf.github.com/go/regexp.html?m:Regexp.FindAllString!
不确定从哪里得到了'RegExp',但正确的包名是'regexp'。 Go区分大小写! – 2011-02-25 17:52:56
我根据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]
的regexp.Split()功能会做到这一点的最好办法。
看起来像[在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
我试过这个,但它覆盖了我想分割的字符。我不想失去角色,只需插入空格。我使用了for循环来达到我的目标。谢谢。 PS - 你的回答不包括正则表达式,也许这就是为什么有一个投票? – Brenden 2013-11-15 09:45:40
没有什么会被“覆盖”,这只是返回的问题。如果你喜欢,你总是可以使用不同的正则表达式函数来获取索引并使用它们。 – 2014-01-24 23:33:37