2 回答

TA貢獻1851條經驗 獲得超5個贊
據我所知,它與您編寫的完全一樣,并且在 regex101 和 Go 中都同樣出色。您觀察到的差異僅僅是因為結果呈現方式的不同。
讓我們仔細看看 regex101 返回的結果。例如,這個:
MATCH 1
SDKClass [15-29] `VideoProjector`
8. [15-29] `VideoProjector`
它基本上說它找到了兩個子匹配,其中一個被命名,另一個在索引 8 上。讓我們看看 Go:
([]string) (len=9 cap=9) {
(string) (len=24) "SDKClass=VideoProjector>",
(string) "",
(string) "",
(string) "",
(string) "",
(string) "",
(string) "",
(string) (len=14) "VideoProjector",
(string) (len=14) "VideoProjector"
},
它說它找到了兩個子匹配,分別是第 7 組和第 8 組。為了獲得第 7 組的名稱,您應該調用r.SubexpNames(),它將返回SDKClassfor r.SubexpNames()[7]。
所以兩者都返回相同的結果。

TA貢獻1942條經驗 獲得超3個贊
所以在 AlexAtNet 的幫助下,我得到了一個答案——足以讓我繼續前進。這是我的最終代碼:
r, _ := regexp.Compile("<-([^=]+)=([^>]+)>")
match := r.FindAllString(string(msg), -1)
result := make(map[string]string)
for _, p := range match {
split := strings.Split(p, "=")
result[split[0]] = split[1]
}
結果如下:
([]string) (len=4 cap=10) {
(string) (len=23) "SDKClass=VideoProjector",
(string) (len=17) "UUID=B8AC6FDFE1E2",
(string) (len=9) "Make=DELL",
(string) (len=11) "Model=S300w"
(string) (len=14) "Revision=0.2.0"
}
但我可以簡單地Split()通過字符串=獲取屬性名稱和值。
我仍在尋找對我的正則表達式和/或代碼的改進,這樣我就可以了解如何在不需要額外拆分或過多代碼的情況下正確地做到這一點。
- 2 回答
- 0 關注
- 271 瀏覽
添加回答
舉報