[regex] Go에서 공백으로 문자열을 분할 하시겠습니까?

와 같은 입력 문자열이 주어지면 " word1 word2 word3 word4 "Go에서 이것을 문자열 배열로 분할하는 가장 좋은 방법은 무엇입니까? 참고가 될 수 있는 각 단어 사이에 공백 또는 유니 코드-간격 문자 수.

Java에서는 someString.trim().split("\\s+").

(참고 : Go에서 정규 표현식을 사용하는 중복 분할 문자열 은 좋은 답변을 제공하지 않습니다. regexp또는 strings패키지 참조에 대한 링크가 아닌 실제 예제를 제공하십시오 .)



답변

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

Fields s는 하나 이상의 연속 된 공백 문자의 각 인스턴스 주위 에서 문자열을 분할하여 의 하위 문자열 배열 s또는 s에 공백 만 포함 된 경우 빈 목록을 반환합니다.


답변

팁을 사용하는 경우 : regexp.Split

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

슬라이스 s를 표현식으로 구분 된 하위 문자열로 분할하고 해당 표현식 일치 사이에 하위 문자열의 슬라이스를 반환합니다.

이 메서드에 의해 반환 된 슬라이스는 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


답변

다음을 생각해 냈지만 너무 장황 해 보입니다.

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

다음과 같이 평가됩니다.

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

더 간결하거나 더 관용적 인 표현이 있습니까?


답변