登录
首页 >  Golang >  Go问答

正则表达式来匹配不同的分隔符

来源:stackoverflow

时间:2024-04-08 10:45:33 418浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《正则表达式来匹配不同的分隔符》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

我需要获取两个分隔符之间的字符串。这对分隔符是不同的。这是我的文字:

[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

我无法从上一场比赛中删除 >。或者整个正则表达式可能是错误的?


解决方案


您可以使用

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

查看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

今天关于《正则表达式来匹配不同的分隔符》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>