在 Go 中分割空格上的字符串?

给定一个输入字符串(如 " word1 word2 word3 word4 ") ,在 Go 中将其拆分为字符串数组的最佳方法是什么?注意,每个单词之间可以有 任何数量的空格或 unicode 间距字符。

在 Java 中,我只使用 someString.trim().split("\\s+")

(注意: 可能重复的 在 Go 中使用正则表达式拆分字符串没有给出任何好的质量答案。请提供一个实际的例子,而不仅仅是一个到 regexpstrings包参考的链接。)

126278 次浏览

我想到了以下几点,但这似乎有点太冗长了:

import "regexp"
r := regexp.MustCompile("[^\\s]+")
r.FindAllString("  word1   word2 word3   word4  ", -1)

评估结果为:

[]string{"word1", "word2", "word3", "word4"}

有没有更紧凑或更惯用的表达方式?

strings包有一个 Fields方法。

someString := "one    two   three four "


words := strings.Fields(someString)


fmt.Println(words, len(words)) // [one two three four] 4

演示: http://play.golang.org/p/et97s90cih

来自文件:

如 unicode.IsSpace 所定义的,字段将一个或多个连续的空白字符的每个实例周围的字符串 s 分割,如果 s 只包含空白字符,则返回一个 s 的子字符串片或一个空片。

如果你使用提示: Regexp 分裂

func (re *Regexp) Split(s string, n int) []string

将切片拆分为由表达式分隔的子字符串并返回 这些表达式之间匹配的子字符串片。

此方法返回的片由所有子字符串组成 不包含在 FindAllString 返回的片中 对于不包含元字符的表达式,它等效于字符串。

例如:

s := regexp.MustCompile("a*").Split("abaabaccadaaae", 5)
// s: ["", "b", "b", "c", "cadaaae"]

计数器确定要返回的子字符串的数量:

n > 0: at most n substrings; the last substring will be the unsplit remainder.
n == 0: the result is nil (zero substrings)
n < 0: all substrings

可以使用包字符串函数拆分 拆分(some String,“”)

绳子,分开