我正在使用go1.10 darwin / amd64,这是代码:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    raw := "012 abc 012"
    r := regexp.MustCompile(`(\d+).*(\d+)`)
    m := r.FindStringSubmatch(raw)
    fmt.Printf("len(m)=%v\n%v\n%v\n%v\n", len(m), m[0], m[1], m[2])
}

输出为:

len(米)= 3

012 abc 012

012

2

您也可以在这里运行它:https://play.golang.org/p/i2zlhClB72e

我希望m [2]的输出是“012”,而不是“2”。

谁能告诉我问题出在哪里?非常感谢。

最佳答案

正则表达式是贪婪的,因此.*将与01匹配,只剩下2与最终的\d+匹配。

您可能需要将表达式更改为以下内容:(\d+)[^\d]*(\d+)$以匹配数字序列(捕获),除数字序列,数字序列(捕获)和行尾以外的任何内容。

其余的相同代码将打印您期望的内容:

len(m)=3
012 abc 012
012
012

09-30 00:19