我正在使用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