我需要在两个除臭器之间获取字符串。而且这对除草机是不同的。这是我的文字:
[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和requset类型(在->之后,在\ {d}之前)
这是我的正则表达式:
[\[|\->](.*?)[\\|\]]
我得到的是
2018.07.10 00:30:03:640 TraceID: 8HRWSI105YVO91 >StartExecuteTask
2018.07.10 00:30:18:585 TraceID: 8707HFH7NR6307 >RequestInfo
我无法从上一场比赛中删除>
。还是整个正则表达式是错误的?
答案 0 :(得分:3)
您可以使用
(?:\[|->)(.*?)[\\\]]
请参见regex demo
在Go中,声明为
var re = regexp.MustCompile(`(?:\[|->)(.*?)[\\\]]`)
详细信息
(?:\[|->)
-与[
字符或->
子字符串匹配的non-capturing group (.*?)
-第1组:除换行符以外的任何0+个字符,且尽可能少[\\\]]
-一个\
或]
字符。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