2016-01-22 120 views
2

我想匹配正則表達式並獲取匹配的捕獲組名稱。這適用於正則表達式只匹配字符串一次,但如果它不止一次匹配字符串,SubexpNames不會返回重複的名稱。Golang正則表達式命名組和子匹配

下面是一個例子:

package main 

import (
    "fmt" 
    "regexp" 
) 

func main() { 
    re := regexp.MustCompile("(?P<first>[a-zA-Z]+) ") 
    fmt.Printf("%q\n", re.SubexpNames()) 
    fmt.Printf("%q\n", re.FindAllStringSubmatch("Alan Turing ", -1)) 
} 

輸出是:

["" "first"] 
[["Alan " "Alan"] ["Turing " "Turing"]] 

是否有可能獲得每個子匹配捕獲組的名字嗎?

回答

1

集團的名稱和位置是固定的:

re := regexp.MustCompile("(?P<first>[a-zA-Z]+) ") 
groupNames := re.SubexpNames() 
for matchNum, match := range re.FindAllStringSubmatch("Alan Turing ", -1) { 
    for groupIdx, group := range match { 
     name := groupNames[groupIdx] 
     if name == "" { 
      name = "*" 
     } 
     fmt.Printf("#%d text: '%s', group: '%s'\n", matchNum, group, name) 
    } 
} 
+0

感謝。現在對我來說很有意義。 –