代码之家  ›  专栏  ›  技术社区  ›  Digital God

不同收货商之间匹配的regexp

  •  2
  • Digital God  · 技术社区  · 6 年前

    我需要在两个熟食店之间串线。这对熟食店是不同的。这是我的文字:

    [2018.07.10 00:30:03:640][TraceID: 8HRWSI105YVO91]->StartExecuteTask\35
    [2018.07.10 00:30:18:585][TraceID: 8707HFH7NR6307]->RequestInfo\27
    [2018.07.10 00:30:18:585][TraceID: 8707HFH7NR6307]->RequestExecuteEnd\16
    [2018.07.10 00:30:18:585][TraceID: 8707HFH7NR6307]->OutgoingData\26651
    [2018.07.10 00:31:16:773][TraceID: G8EM5LANBPC32H]->CheckUserInfo\141
    

    我需要获取时间、traceid和requeset类型(after->before \ d)

    这是我的经验:

    [\[|\->](.*?)[\\|\]]
    

    我得到什么:

    2018.07.10 00:30:03:640   TraceID: 8HRWSI105YVO91  >StartExecuteTask
    2018.07.10 00:30:18:585   TraceID: 8707HFH7NR6307  >RequestInfo
    

    我不能移除 > 从上次匹配开始。或者整个regexp是错误的?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Wiktor Stribiżew    6 年前

    (?:\[|->)(.*?)[\\\]]
    

    regex demo

    var re = regexp.MustCompile(`(?:\[|->)(.*?)[\\\]]`)
    

    Demo

    package main
    
    import (
        "regexp"
        "fmt"
    )
    
    func main() {
        var re = regexp.MustCompile(`(?:\[|->)(.*?)[\\\]]`)
        var str = `[2018.07.10 00:30:03:640][TraceID: 8HRWSI105YVO91]->StartExecuteTask\35`
    
        for _, match := range re.FindAllStringSubmatch(str, -1) {
            fmt.Println(match[1])
        }   
    }
    

    2018.07.10 00:30:03:640
    TraceID: 8HRWSI105YVO91
    StartExecuteTask