Home > Backend Development > Golang > Go: Split a string of comma-separated key/value pairs. Commas may be embedded in a given key/value pair.

Go: Split a string of comma-separated key/value pairs. Commas may be embedded in a given key/value pair.

WBOY
Release: 2024-02-10 19:54:08
forward
1240 people have browsed it

Go: Split a string of comma-separated key/value pairs. Commas may be embedded in a given key/value pair.

In PHP, you can use the Go function to split a string of key/value pairs separated by commas. This function is very useful, especially when there may be embedded commas in a given key/value pair. Go functions make it easy to split key/value pairs into independent parts for further processing and use. Whether processing form data or parsing CSV files, Go functions can help us complete the task efficiently. In this article, we will detail how to split key/value pairs using Go functions and provide some practical examples for reference. let's start!

Question content

I am fairly new to the Go language and am looking for a way to split a variable length string into a map where the key/value pairs (all strings) are separated by commas delimited, only some variations of the string may have multiple commas and/or colons in a given key/value pair. For example:

String1Variation keyword1=value1,keyword2=value2,keyword3=value3,value4,value5,keyword4=value6... String2Variation Keyword 1 = value 1, keyword 2 = value 2, keyword 3 = value 3, value 4, value 5: value 6, value 7, value 8, keyword 4 = value 9...

where "..." reflects the fact that there will be a variable # key/value pair. I hope to end up with a map like this:

map[string]string{
     
            keyword1: "value1",
            keyword2: "value2",
            keyword3: "value3,value4,value5",
            keyword4: "valu6",
    }
Copy after login

or

map[string]string{
     
            keyword1: "value1",
            keyword2: "value2",
            keyword3: "value3,value4,value5:value6,value7,value8",
            keyword4: "valu6",
    }
Copy after login

Unfortunately, the format of the lines I will be reading from the file is quite complex, and my options for changing the format of the incoming data are limited. I've been working on this for a while, unfortunately I'm not a wizard with regular expressions, so any help would be greatly appreciated.

Workaround

Match (global), not split, then you don't need to look around: (.*? )=([^=]*)( ?:,|$). In 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" })
}
Copy after login

The above is the detailed content of Go: Split a string of comma-separated key/value pairs. Commas may be embedded in a given key/value pair.. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template