Разбить строку на пробелы в Go?


учитывая входную строку, такую как " word1 word2 word3 word4 ", каков был бы лучший подход для разделения этого массива строк в Go? Обратите внимание, что там может быть любой количество пробелов или символов Юникода между каждым словом.

в Java, я бы просто использовать someString.trim().split("s+").

(Примечание: возможный дубликат разделенной строки с использованием регулярного выражения в Go не дает хорошего качественного ответа. Пожалуйста, приведите реальный пример, а не просто ссылку на regexp или strings ссылки на пакеты.)

3 77

3 ответа:

The 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

документы:

func Fields(s string) []string

поля разбивает строку s вокруг каждого экземпляра одного или нескольких последовательных пробелов, возвращающих массив подстрок s или пустой список, Если s содержит только пробелы.

Если вы используете совет: регулярное выражение.Сплит

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

разбить ломтики s на подстроки, разделенные выражением и возвращает фрагмент подстрок между этими совпадениями выражений.

срез, возвращаемый этим методом, состоит из всех подстрок s не содержится в срезе, возвращенном 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

Я придумал следующее, Но это кажется немного слишком verbose:

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

что будет оцениваться:

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

есть ли более компактное или более идиоматическое выражение?