Étant donné une chaîne d'entrée telle que " word1 word2 word3 word4 "
, quelle serait la meilleure approche pour diviser cela en un tableau de chaînes dans Go? Notez qu'il peut y avoir n'importe quel nombre d'espaces ou de caractères d'espacement Unicode entre chaque mot.
En Java, je voudrais simplement utiliser someString.trim().split("\\s+")
.
(Remarque: une éventuelle chaîne de fractionnement en double utilisant une expression régulière dans Go ne donne pas de réponse de bonne qualité. Veuillez fournir un exemple réel, pas seulement un lien vers la référence regexp
ou strings
packages.)
strings.Fields
n'ignore pas les espaces dans les parties entre guillemets.shlex
pour ce godoc.org/github.com/google/shlexSi vous utilisez tip: regexp.Split
Divise les tranches s en sous-chaînes séparées par l'expression et renvoie une tranche des sous-chaînes entre ces correspondances d'expression.
La tranche retournée par cette méthode comprend toutes les sous-chaînes de s non contenues dans la tranche retournée par FindAllString. Lorsqu'il est appelé sur une expression qui ne contient aucun méta-caractère, il équivaut à strings.SplitN.
Exemple:
Le nombre détermine le nombre de sous-chaînes à renvoyer:
la source
Fields()
ne retournera pas de chaînes vides. Le nombre de champs renvoyés variera donc. Si vous essayez d'analyser quelque chose de cohérent, cela ne fonctionnera pas pour vous. Vous devrez peut-être utiliser regex si unFieldsFunc()
ne fonctionne pas non plus.J'ai proposé ce qui suit, mais cela semble un peu trop détaillé:
qui évaluera à:
Existe-t-il une expression plus compacte ou plus idiomatique?
la source