Go:分割一串用逗号分隔的键/值对,给定的键/值对中可能嵌入逗号

2024年 2月 10日 63.5k 0

go:分割一串用逗号分隔的键/值对,给定的键/值对中可能嵌入逗号

在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:分割一串用逗号分隔的键/值对,给定的键/值对中可能嵌入逗号的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论