我正在尝试使用golang regex来解析体育比分,但是找不到理由,为什么它不解析所有得分部分,而只是解析第一部分和最后部分。
package main
import (
"fmt"
"regexp"
)
func main() {
var FirstQuarterBasketballRegexp = regexp.MustCompile(`^(\d+:\d+)\s\((?:(\d+:\d+)(?:,\s)?)+\)$`)
fmt.Printf("%q\n", FirstQuarterBasketballRegexp.FindAllStringSubmatch("102:72 (28:17, 27:15, 24:14, 23:26)", -1))
}
它打印一个字符串
[["102:72 (28:17, 27:15, 24:14, 23:26)" "102:72" "23:26"]]
为什么切片中只包含3个元素?
答案 0 :(得分:3)
它返回3个元素,因为有第0个组(整个字符串)和2个捕获组:
1. [0-6] `102:72`
2. [29-34] `23:26`
现在,你应该考虑你需要什么,只使用你需要的东西。
也许,您正在寻找将返回的(\d+:\d+)
102:72
28:17
27:15
24:14
23:26
尝试此代码(sample program is available here):
func main() {
var FirstQuarterBasketballRegexp = regexp.MustCompile(`\d+:\d+`)
fmt.Printf("%q\n", FirstQuarterBasketballRegexp.FindAllStringSubmatch("102:72 (28:17, 27:15, 24:14, 23:26)", -1))
}
输出:
[["102:72"] ["28:17"] ["27:15"] ["24:14"] ["23:26"]]