【发布时间】:2015-08-07 11:35:43
【问题描述】:
我有以下字符串,它是来自我们网络上的投影仪的发现数据包:
AMXB<-SDKClass=VideoProjector><-UUID=ABCDEFG><-Make=DELL><-Model=S300w><-Revision=0.2.0>
我正在尝试编写一些将其转换为地图的 Golang 代码,因此我可以调用 details["UUID"] 并让它返回 ABCDEFG。我写了一个看起来像这样的正则表达式:
(?:UUID=)(?P<UUID>(.*?))>|(?:Make=)(?P<Make>(.*?))>|(?:Model=)(?P<Model>(.*?))>|(?:SDKClass=)(?P<SDKClass>(.*?))>
当我使用regex 101 在线测试它时,它似乎与所有内容都匹配得很好,除了编号的组,但我可以很容易地忽略那些:
第 1 场
SDKClass [15-29] VideoProjector
- [15-29] 视频投影仪
第 2 场
UUID [37-49] B8AC6FDFE1E2
- [37-49] B8AC6FDFE1E2
第 3 场
制造 [57-61] 戴尔
- [57-61] 戴尔
第 4 场
型号 [70-75] S300w
- [70-75] S300w
但是当我在 Golang 中尝试时,我得到了different results(注意:这些结果是使用 go-spew 整理的,以便于阅读):
([][]string) (len=4 cap=10) {
([]string) (len=9 cap=9) {
(string) (len=24) "SDKClass=VideoProjector>",
(string) "",
(string) "",
(string) "",
(string) "",
(string) "",
(string) "",
(string) (len=14) "VideoProjector",
(string) (len=14) "VideoProjector"
},
([]string) (len=9 cap=9) {
(string) (len=18) "UUID=B8AC6FDFE1E2>",
(string) (len=12) "B8AC6FDFE1E2",
(string) (len=12) "B8AC6FDFE1E2",
(string) "",
(string) "",
(string) "",
(string) "",
(string) "",
(string) ""
},
([]string) (len=9 cap=9) {
(string) (len=10) "Make=DELL>",
(string) "",
(string) "",
(string) (len=4) "DELL",
(string) (len=4) "DELL",
(string) "",
(string) "",
(string) "",
(string) ""
},
([]string) (len=9 cap=9) {
(string) (len=12) "Model=S300w>",
(string) "",
(string) "",
(string) "",
(string) "",
(string) (len=5) "S300w",
(string) (len=5) "S300w",
(string) "",
(string) ""
}
}
我的正则表达式有什么问题,我该如何解决?我已经尝试了几乎所有的表达式组合(我现在几乎是一个正则表达式大师:\)
【问题讨论】: