doudeng5218 2018-03-21 13:07
浏览 625
已采纳

golang regexp FindStringSubmatch()没有返回正确的最后一组

I am using go1.10 darwin/amd64, here is the code:

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
%v
%v
%v
", len(m), m[0], m[1], m[2])
}

Output is:

len(m)=3

012 abc 012

012

2

You can also run it here: https://play.golang.org/p/i2zlhClB72e

I expect that the output of m[2] is "012" but not "2".

Can anyone let me know where the issue is? Thanks very much.

  • 写回答

1条回答 默认 最新

  • droi5225 2018-03-21 13:13
    关注

    Regular expressions are greedy, so .* will match 01 leaving just 2 to match the final \d+.

    You probably want to change your expression to something like the following: (\d+)[^\d]*(\d+)$ to match a sequence of digits (captured), anything but a sequence of digits, a sequence of digits (captured), and the end of line.

    The same code for the rest will print what you expected:

    len(m)=3
    012 abc 012
    012
    012
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?