2015-04-03 46 views
0

我想使用golang正則表達式來解析體育比分,但是找不到原因,爲什麼它不解析所有分數部分,而只是第一個和最後一個。使用golangs正則表達式解析體育比分

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 ELEM?

+3

那你希望它匹配? (另外,你爲什麼使用正則表達式呢?) – JimB 2015-04-03 13:32:46

+0

我想驗證分數,並同時獲得所有分數。所以,我像stribizhev所說的那樣搜索與(\ d +:\ d +)相同的輸出。 – user2024300 2015-04-03 14:01:24

回答

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"]] 
+0

是否可以驗證分數字符串並同時獲得結果? – user2024300 2015-04-03 14:02:32

+1

要驗證,您應該提供驗證規則。其實,你問了別的什麼。我建議在嘗試首先自己解決所有問題後發佈另一個問題。在SO上,我們重視人們自己的努力。 – 2015-04-03 14:04:46

+0

我可能誤解了正則表達式。認爲它應該返回[[102:72(28:17,27:15,24:14,23:26)「」102:72「」27:15「」24:14「」23:26「]]如果得分像「102:72(28:17,27:15,24:14,23:26)」,並且如果得分像「70:70(14:23,21:21,18:14,17)那樣返回空片:12加班5:9)「 – user2024300 2015-04-03 14:19:34