在Go中的空格上拆分一个字符串?

时间:2012-12-06 05:53:12

标签: regex go

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

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

(注意:可能重复的Split string using regular expression in Go没有提供任何高质量的答案。请提供一个实际示例,而不仅仅是指向regexpstrings软件包参考的链接。)< / p>

4 个答案:

答案 0 :(得分:195)

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

     

字段在一个或多个连续空白字符的每个实例周围分割字符串s,如果s仅包含空格,则返回s的子字符串数组或空列表。

答案 1 :(得分:8)

如果您正在使用提示:regexp.Split

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

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

此方法返回的切片包含所有子字符串 未包含在FindAllString返回的切片中的s。什么时候叫 在不包含元字符的表达式上,它等同于strings.SplitN。

示例:

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

答案 2 :(得分:3)

我想出了以下内容,但这看起来有点过于冗长:

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

将评估为:

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

是否有更紧凑或更惯用的表达?

答案 3 :(得分:1)

可以使用包字符串函数拆分 strings.Split(someString, " ")

strings.Split