Maison > développement back-end > Golang > le corps du texte

Go : diviser une chaîne de paires clé/valeur séparées par des virgules. Des virgules peuvent être intégrées dans une paire clé/valeur donnée.

WBOY
Libérer: 2024-02-10 19:54:08
avant
1192 Les gens l'ont consulté

Go : diviser une chaîne de paires clé/valeur séparées par des virgules. Des virgules peuvent être intégrées dans une paire clé/valeur donnée.

En PHP, vous pouvez utiliser la fonction Go pour diviser une chaîne de paires clé/valeur séparées par des virgules. Cette fonction est très utile, en particulier lorsqu'il peut y avoir des virgules incorporées dans une paire clé/valeur donnée. Les fonctions Go facilitent la division des paires clé/valeur en parties indépendantes pour un traitement et une utilisation ultérieurs. Qu'il s'agisse de traiter les données d'un formulaire ou d'analyser des fichiers CSV, les fonctions Go peuvent nous aider à accomplir la tâche efficacement. Dans cet article, nous détaillerons comment diviser les paires clé/valeur à l'aide des fonctions Go et fournirons quelques exemples pratiques pour référence. commençons!

Contenu de la question

Je suis relativement nouveau dans le langage Go et je cherche un moyen de diviser une chaîne de longueur variable en une carte où les paires clé/valeur (toutes les chaînes) sont séparées par des virgules et seulement certaines des variantes de chaînes peut avoir plusieurs virgules et/ou deux-points dans une paire clé/valeur donnée. Par exemple :

Variante String 1 mot-clé1=valeur1,mot-clé2=valeur2,mot-clé3=valeur3,valeur4,valeur5,mot-clé4=valeur6... Variante String 2 mot-clé 1 = valeur 1, mot-clé 2 = valeur 2, mot-clé 3 = valeur 3, valeur 4, valeur 5 : valeur 6, valeur 7, valeur 8, mot-clé 4 = valeur 9...

où "..." reflète le fait qu'il y aura une variable # paire clé/valeur. J'espère finir avec une carte comme celle-ci :

map[string]string{
     
            keyword1: "value1",
            keyword2: "value2",
            keyword3: "value3,value4,value5",
            keyword4: "valu6",
    }
Copier après la connexion

ou

map[string]string{
     
            keyword1: "value1",
            keyword2: "value2",
            keyword3: "value3,value4,value5:value6,value7,value8",
            keyword4: "valu6",
    }
Copier après la connexion

Malheureusement, le format des lignes que je vais lire à partir du fichier est assez complexe et mes options pour modifier le format des données entrantes sont limitées. Je travaille là-dessus depuis un certain temps, malheureusement je ne suis pas un expert en expressions régulières, donc toute aide serait grandement appréciée.

Solution de contournement

Match (global) au lieu de diviser, vous n'avez alors pas besoin de regarder autour de vous : (.*? )=([^=]*)(?:,|$). En Go :

package kvparse

import (
    "regexp"
    "testing"
    "reflect"
)

var kvPairRe = regexp.MustCompile(`(.*?)=([^=]*)(?:,|$)`)
func ParseKV(kvStr string) map[string]string {
    res := map[string]string{}
    for _, kv := range kvPairRe.FindAllStringSubmatch(kvStr, -1) {
        res[kv[1]] = kv[2]
    }
    return res
}

func TestParseKV(t *testing.T) {
    test := func(kvStr string, expectedMap map[string]string) {
        gotMap := ParseKV(kvStr)
        if !reflect.DeepEqual(expectedMap, gotMap) {
            t.Errorf("Abs(%s) = %v; want %v", kvStr, gotMap, expectedMap)
        }
    }
    test("keyword1=value1,keyword2=value2,keyword3=value3,value4,value5,keyword4=value6",
        map[string]string{ "keyword1": "value1", "keyword2": "value2", "keyword3": "value3,value4,value5", "keyword4": "value6" })
    test("keyword1=value1,keyword2=value2,keyword3=value3,value4,value5:value6,value7,value8,keyword4=value9",
        map[string]string{ "keyword1": "value1", "keyword2": "value2", "keyword3": "value3,value4,value5:value6,value7,value8", "keyword4": "value9" })
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal