猿问

FindStringSubmatch 两次返回匹配组

也许我错过了关于 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 中工作?谢谢


呼啦一阵风
浏览 372回答 1
1回答

梦里花落0921

来自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"
随时随地看视频慕课网APP

相关分类

Go
我要回答