在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中文網其他相關文章!