2 回答
TA贡献1785条经验 获得超4个赞
组名和位置是固定的:
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)
}
}
TA贡献1827条经验 获得超9个赞
这可能包含在 Go 1.14(2020 年第一季度,尚未确认)中。
参见“提案:正则表达式:添加(*Regexp).SubexpIndex#32420 ”。更新:它已包含在 Go 1.15(2020 年 8 月)的commit 782fcb4中。
// SubexpIndex returns the index of the first subexpression with the given name,
// or else -1 if there is no subexpression with that name.
//
// Note that multiple subexpressions can be written using the same name, as in
// (?P<bob>a+)(?P<bob>b+), which declares two subexpressions named "bob".
// In this case SubexpIndex returns the index of the leftmost such subexpression
// in the regular expression.
func (*Regexp) SubexpIndex(name string) int
这在CL 187919 中进行了讨论。
re := regexp.MustCompile(`(?P<first>[a-zA-Z]+) (?P<last>[a-zA-Z]+)`)
fmt.Println(re.MatchString("Alan Turing"))
matches := re.FindStringSubmatch("Alan Turing")
lastIndex := re.SubexpIndex("last")
fmt.Printf("last => %d\n", lastIndex)
fmt.Println(matches[lastIndex])
// Output:
// true
// last => 2
// Turing
- 2 回答
- 0 关注
- 244 浏览
添加回答
举报