Python 正则表达式不匹配
我尝试使用正则表达式从日志文件中获取SQL信息 我需要的信息是SQL的运行时间、SQL语句和SQL的参数 这是我的密码: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) }
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工作情况
- 创建一个函数来解析这些行
- 使用日志中的行,编写一些测试来实现您的功能