文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-02-10 20:28

关注

在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:分割一串用逗号分隔的键/值对,给定的键/值对中可能嵌入逗号的详细内容,更多请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯