在Go中分割一个空白string?
给定一个inputstring,如" word1 word2 word3 word4 "
,在Go中将string数组拆分成什么样的最佳方法? 请注意,每个单词之间可以有任意数量的空格或Unicode空格字符。
在Java中,我只是使用someString.trim().split("\\s+")
。
(注意: 在Go中使用正则expression式可能会出现重复的Splitstring,并不会给出任何高质量的答案。请提供一个实际的例子,而不仅仅是指向正则regexp
或strings
包引用的链接。
strings
包有一个Fields
方法。
someString := "one two three four " words := strings.Fields(someString) fmt.Println(words, len(words)) // [one two three four] 4
DEMO: http : //play.golang.org/p/et97S90cIH
从文档:
func Fields(s string) []string
字段在一个或多个连续的空白字符的每个实例周围分割string
s
,如果s只包含空格,则返回s
的子string数组或空列表。
如果您使用提示: regexp.Split
func (re *Regexp) Split(s string, n int) []string
将切片s分割成由expression式分隔的子string,并在这些expression式匹配之间返回一个子string切片。
此方法返回的片包含所有不包含在由FindAllString返回的片中的子string。 在不包含元字符的expression式上调用时,它相当于strings.SplitN。
例:
s := regexp.MustCompile("a*").Split("abaabaccadaaae", 5) // s: ["", "b", "b", "c", "cadaaae"]
计数确定要返回的子string的数量:
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
我想出了以下内容,但这似乎有点过于冗长:
import "regexp" r := regexp.MustCompile("[^\\s]+") r.FindAllString(" word1 word2 word3 word4 ", -1)
这将评估为:
[]string{"word1", "word2", "word3", "word4"}
有一个更紧凑或更习惯的expression?