在PHP中,使用Go函数可以将一串用逗号分隔的键/值对进行分割。这个函数非常有用,特别是在给定的键/值对中可能嵌入逗号的情况下。使用Go函数可以轻松地将键/值对分割成独立的部分,以便进一步处理和使用。无论是处理表单数据,还是解析CSV文件,Go函数都可以帮助我们高效地完成任务。在本文中,我们将详细介绍如何使用Go函数分割键/值对,并提供一些实用的示例供参考。让我们开始吧!
我对 Go 语言相当陌生,正在寻找一种方法将可变长度字符串拆分为一个映射,其中键/值对(所有字符串)以逗号分隔,只有字符串的某些变体可能有多个逗号和/或给定键/值对中的冒号。例如:
字符串1变体 关键字1=值1,关键字2=值2,关键字3=值3,值4,值5,关键字4=值6 ... 字符串2变体 关键字1=值1,关键字2=值2,关键字3=值3,值4,值5:值6,值7,值8,关键字4=值9 ...
其中“...”反映了这样一个事实:将有一个变量#键/值对。我希望最终得到一张这样的地图:
map[string]string{ keyword1: "value1", keyword2: "value2", keyword3: "value3,value4,value5", keyword4: "valu6", }
或
map[string]string{ keyword1: "value1", keyword2: "value2", keyword3: "value3,value4,value5:value6,value7,value8", keyword4: "valu6", }
不幸的是,我将从文件中读取的行格式相当复杂,并且我用于更改传入数据格式的选项有限。我已经在这方面投入了一段时间,不幸的是我不是正则表达式的向导,所以任何帮助将不胜感激。
匹配(全局),而不是拆分,那么您不需要环视:(.*? )=([^=]*)(?:,|$)
。在 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" }) }
以上是Go:分割一串用逗号分隔的键/值对,给定的键/值对中可能嵌入逗号的详细内容。更多信息请关注PHP中文网其他相关文章!