使用golangs正则表达式来解析体育比分

时间:2015-04-03 13:30:03

标签: regex go

我正在尝试使用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个元素?

1 个答案:

答案 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"]]