regex - 正则表达式匹配不同的分隔符
问题描述
我需要在两个定界符之间获取字符串。而这对定界符是不同的。这是我的文字:
[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 和请求类型(之后 -> 在 \{d} 之前)
这是我的正则表达式:
[\[|\->](.*?)[\\|\]]
我得到什么:
2018.07.10 00:30:03:640 TraceID: 8HRWSI105YVO91 >StartExecuteTask
2018.07.10 00:30:18:585 TraceID: 8707HFH7NR6307 >RequestInfo
我无法>
从最后一场比赛中删除。或者也许整个正则表达式是错误的?
解决方案
您可以使用
(?:\[|->)(.*?)[\\\]]
查看正则表达式演示
在 Go 中,声明为
var re = regexp.MustCompile(`(?:\[|->)(.*?)[\\\]]`)
细节
(?:\[|->)
-匹配字符或子字符串的非捕获组[
->
(.*?)
- 第 1 组:除换行符之外的任何 0+ 个字符,尽可能少[\\\]]
- 一个\
或]
字符。
演示:
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
推荐阅读
- python - 在python中将日期时间类型转换为元组
- oracle - 如何在序列范围之间找到序列号
- javascript - redux 存储更新时组件未按预期重新渲染
- scala - 在playframework中,我们在实现QueryStringBindable时是否需要总是重写unbind方法?
- laravel - ErrorException 数组到字符串的转换 Laravel
- mysql - 将产品属性转换为标签
- reactjs - 即使列出了依赖项,也反应 useEffect 导致无限循环(使用 Firebase 实时数据库)
- c++ - 是变量初始化失败吗?
- java - Java 并发:是什么导致了对象发布的不安全性?
- reactjs - Material-UI 滑块 - 使用比例更改值