Issue
I have the following go string:
dbConnStr := "user=someone password=something host=superduperhost sslmode=something"
but the k=v pair code may be in any order, for example:
dbConnStr := "host=superduperhost user=someone password=something"
Notice the difference in the key order and also the missing “sslmode” key in the str.
Also, it is possible that instead of whitespace, the individual k,v pairs may be separated by newline too.
Now I want to extract the unique keys and their corresponding values from the given string, using regexp. If it will help, I can give a list of all the possible keys that may come (username, password, host, sslmode), but I would ideally like a regex solution that works with any list of keys and values.
How to do this ? I understand that it may be possible with regexp.FindStringSubmatch but not able to wrap my head around writing the regexp.
Solution
Got answer to this from golang nuts group.
var rex = regexp.MustCompile("(\\w+)=(\\w+)")
conn := `user=someone password=something host=superduperhost
sslmode=something`
data := rex.FindAllStringSubmatch(conn, -1)
res := make(map[string]string)
for _, kv := range data {
k := kv[1]
v := kv[2]
res[k] = v
}
fmt.Println(res)
Golang Playground url: https://play.golang.org/p/xSEX1CAcQE
Answered By – Sankar
Answer Checked By – David Goodson (GoLangFix Volunteer)