Biorąc pod uwagę ciąg wejściowy, taki jak " word1 word2 word3 word4 "
, jakie byłoby najlepsze podejście do podzielenia go jako tablicy ciągów w Go? Zauważ, że między każdym słowem może występować dowolna liczba spacji lub znaków odstępu Unicode.
W Javie po prostu użyłbym someString.trim().split("\\s+")
.
(Uwaga: możliwy duplikat ciągu Split przy użyciu wyrażenia regularnego w Go nie daje żadnej dobrej odpowiedzi. Podaj rzeczywisty przykład, a nie tylko link do odwołania do regexp
lub strings
pakietów).
strings.Fields
nie ignoruje spacji w cytowanych częściach.shlex
do tego godoc.org/github.com/google/shlexJeśli używasz tip: regexp.Split
Podziel plasterki na podciągi oddzielone wyrażeniem i zwróć wycinek podciągów między tymi dopasowanymi wyrażeniami.
Wycinek zwracany przez tę metodę składa się ze wszystkich podciągów s, które nie są zawarte w wycinku zwróconym przez FindAllString. W przypadku wywołania wyrażenia, które nie zawiera metaznaków, jest równoważne ze stringami.SplitN.
Przykład:
Liczba określa liczbę zwracanych podciągów:
źródło
Fields()
nie zwróci pustych ciągów. Więc liczba zwróconych pól będzie się różnić. Jeśli próbujesz przeanalizować coś spójnego, to nie zadziała. Może być konieczne użycie wyrażenia regularnego, jeśliFieldsFunc()
również nie zadziała.Wymyśliłem następujące, ale wydaje się to zbyt szczegółowe:
który oceni jako:
Czy istnieje bardziej zwięzłe lub idiomatyczne wyrażenie?
źródło