Python 正则表达式不匹配

Python 正则表达式不匹配,python,regex,go,Python,Regex,Go,我尝试使用正则表达式从日志文件中获取SQL信息 我需要的信息是SQL的运行时间、SQL语句和SQL的参数 这是我的密码: package main import ( "os" "fmt" "io/ioutil" "regexp" ) func main(){ file,err:=os.OpenFile("./log.txt",os.O_RDWR,0755) if err !=nil{ fmt.Println(err) }

我尝试使用正则表达式从日志文件中获取SQL信息

我需要的信息是SQL的运行时间、SQL语句和SQL的参数

这是我的密码:

package main

import (
    "os"
    "fmt"
    "io/ioutil"
    "regexp"
)

func main(){
    file,err:=os.OpenFile("./log.txt",os.O_RDWR,0755)
    if err !=nil{
        fmt.Println(err)
    }
    b,err:=ioutil.ReadAll(file)
    str:=string(b)
    r,err:=regexp.Compile(`\[ORM\][\w\W]+?(\d*.\d*ms|\d*.\d*s)\][ -]+\[([\w\W]+?)\]`)

    s:=r.FindAllStringSubmatch(str,-1)
    fmt.Println(s[0][3])
    fmt.Println(s[1][3])
}
这是我的日志样本

[ORM]2018/08/03 10:23:50-[Queries/read]-[OK/db.Query/432.4ms]-[SELECT acc.*、gp.group\u name、gp.group\u id、org.org\u name、group\u concat(r.role\u name)role\u name 来自系统账户acc 在org.org\u id=acc.org\u id上左键加入系统组织 在gp.group\U id=org.group\U id上左连接系统组gp 在ar.acct\U id=acc.acct\U id和ar.is\U del=0上左加入系统帐户角色ar 按acc.acct\U id顺序按acc.create\U time desc LIMIT 0,15]-`1``ASDFASDF在r.role\U id=ar.role\U id=1和acc.acct\U type=1上左连接系统角色r` nsq consumer2:INF 13[RYOLST_Chu__admin/crm](192.168.1.233:4150)从nsqd接收到关闭等待 nsq消费者2:INF 13[RYOLST_Ch_admin/crm](192.168.1.233:4150)开始关闭 nsq consumer2:INF 13[RYOLST_Ch_admin/crm](192.168.1.233:4150)读取循环正在退出 nsq consumer2:INF 13[RYOLST_Chu__admin/crm](192.168.1.233:4150)中断写操作 nsq consumer2:INF 13[RYOLST_Chu__admin/crm](192.168.1.233:4150)写入操作正在退出 [ORM]2018/08/03 10:23:50-[Queries/default]-[OK/db.Query/0.6ms]-[select*from sys\u group,其中group\u id=?]-`111``QWQW`

我希望如此,请打印出

`1``ASDFASDF`

`111``qwqwqw`

我现在只剩下最后一个无法理解的论点

这些参数可能是多个的,也可能不是多个的。您也可能有太多围绕文件的参数

我自己也试过:

r,err:=regexp.Compile(`\[ORM\][\w\W]+?(\d*.\d*ms|\d*.\d*s)\][ -]+\[([\w\W]+?)\][ -]*((\W\w*\W{1,2})*)`)
r,err:=regexp.Compile(`\[ORM\][\w\W]+?(\d*.\d*ms|\d*.\d*s)\][ -]+\[([\w\W]+?)\][- ]*([^\n]*)`)

您可能需要这样的regexp:

var re = regexp.MustCompile(`\[ORM\][^-]* -\[[^]]*\] - \[ .* / .* / ([^]]*)] - \[([^]]*)\] - (.*)`)

这假设数据格式良好,每行一个条目。如果没有,您可能无法使用regexp解析它,即使这样,也会对不包含字符串[]的查询做出一些假设(您可能会侥幸逃脱)

首先,我要再次检查,您是否绝对无法在第一时间以正确的格式获得此数据输出-如果可以的话,最好直接获得您想要的输出,甚至可能有一个单独的日志,或者更好地将这样的度量发送到时间序列数据库以供以后分析。解析此类信息的日志并不好,尤其是在持续进行的基础上

如果必须分析日志,请提供一些有关测试日志的建议:

  • 使用play.golang.org进行快速测试
  • 使用regexp.MustCompile检查您的regexp工作情况
  • 创建一个函数来解析这些行
  • 使用日志中的行,编写一些测试来实现您的功能

为什么使用Python和Go标记?你用哪种语言?此外,一些示例输入和预期输出是什么?您好,我已经修改了这个问题,我现在使用golang,但是正则表达式是一样的,python使用更多的正则表达式。我对这个问题没有任何理解。请花点时间来解释。我已经清楚地描述了它,它与代码无关。正则表达式在任何语言中都是相同的。谢谢你的回复。让我自己想想。我不明白你的问题。请编辑它,以便我们可以确定1。您正在使用的正则表达式2。期望输出3。输入。