我正在尝试匹配一个正则表达式,并获取匹配的捕获组名称。当正则表达式只匹配一次字符串时有效,但是如果它多次匹配字符串,则SubexpNames
不会返回重复的名称。
这是一个例子:
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"]]
是否可以获取每个子匹配项的捕获组名称?
最佳答案
组名和位置是固定的:
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)
}
}
关于regex - Golang正则表达式命名组和子匹配项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34949554/