FindStringSubmatch返回匹配的组两次

时间:2014-11-14 18:17:42

标签: go

也许我错过了关于go regexp.FindStringSubmatch()的一些非常基本的东西。我想捕获具有字符串"Serial Number: "后面的所有数字的组,但得到意外的输出。我的代码如下:

package main
import "fmt"
import "regexp"

func main() {

    x := "Serial Number: 12334"
    r := regexp.MustCompile(`(\d+)`)
    res := r.FindStringSubmatch(x)

    for i,val := range res {
        fmt.Printf("entry %d:%s\n", i,val)
    }
}

输出结果为:

entry 0:12334
entry 1:12334

我对python的分组比较熟悉,看起来很简单:

>>> re.search('(\d+)', "Serial Number: 12344").groups()[0]
'12344'

如何让分组在go中工作? 感谢

1 个答案:

答案 0 :(得分:2)

来自Regexp.FindStringSubmatch

  

FindStringSubmatch返回一个字符串片段,其中包含s中正则表达式最左边匹配的文本和匹配项

所以:

  • 第一个条目是匹配的内容:'12334'(最左边的匹配)
  • 第二个条目是一个捕获的组:“12334

另一个例子:

re := regexp.MustCompile("a(x*)b(y|z)c")
fmt.Printf("%q\n", re.FindStringSubmatch("-axxxbyc-"))

那将打印出来:

  • 最左边的匹配:"axxxbyc"
  • 两个被捕获的群组:"xxx" "y"