Учитывая входную строку, например " word1 word2 word3 word4 "
, как лучше всего разделить ее как массив строк в Go? Обратите внимание, что между каждым словом может быть любое количество пробелов или символов Unicode.
В Java я бы просто использовал someString.trim().split("\\s+")
.
(Примечание: возможное дублирование разделенной строки с использованием регулярного выражения в Go не дает качественного ответа. Приведите реальный пример, а не просто ссылку на ссылку на пакеты regexp
или strings
.)
strings.Fields
не игнорирует пробелы в цитируемых частях.shlex
для этого godoc.org/github.com/google/shlexЕсли вы используете tip: regexp.Split
Разбивает срезы s на подстроки, разделенные выражением, и возвращает срез подстрок между этими совпадениями выражений.
Срез, возвращаемый этим методом, состоит из всех подстрок s, не содержащихся в срезе, возвращаемом FindAllString. Когда вызывается для выражения, которое не содержит метасимволов, оно эквивалентно strings.SplitN.
Пример:
Счетчик определяет количество возвращаемых подстрок:
источник
Fields()
пустые строки не возвращаются. Таким образом, количество возвращаемых полей будет различным. Если вы пытаетесь разобрать что-то непротиворечивое, у вас это не сработает. Возможно, вам придется использовать регулярное выражение, еслиFieldsFunc()
также не сработает.Я придумал следующее, но это кажется слишком многословным:
который оценит:
Есть ли более компактное или более идиоматическое выражение?
источник