首頁 > 後端開發 > Golang > Go:分割一串用逗號分隔的鍵/值對,給定的鍵/值對中可能嵌入逗號

Go:分割一串用逗號分隔的鍵/值對,給定的鍵/值對中可能嵌入逗號

WBOY
發布: 2024-02-10 19:54:08
轉載
1239 人瀏覽過

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:分割一串用逗號分隔的鍵/值對,給定的鍵/值對中可能嵌入逗號的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板