为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式组选择

正则表达式组选择

Go
凤凰求蛊 2021-03-30 17:15:30
我陷入了日志解析的困境。我在日志文件中有此行。一切都以行结尾\n[2018.07.10 00:30:03:125] VersionInfo\886[2018.07.10 00:30:03:109][TraceID: 8HRWSI105YVO91]->IncomingTime\16[2018.07.10 00:30:03:109][TraceID: 8HRWSI105YVO91]->IncomingData\397[2018.07.10 00:30:03:109][TraceID: 8HRWSI105YVO91]->ThreadID\8[2018.07.10 00:30:03:109][TraceID: 8HRWSI105YVO91]->RequestExecuteStart\16[2018.07.10 00:30:03:109][TraceID: 8HRWSI105YVO91]->RequestInfo\25[2018.07.10 00:30:03:109][TraceID: 8HRWSI105YVO91]->CheckUserInfo\139[2018.07.10 00:30:03:218]->Start RTS[2018.07.10 00:30:03:640][TraceID: 8HRWSI105YVO91]->StartExecuteTask\35[2018.07.10 00:30:03:749][TraceID: 8HRWSI105YVO91]->EndExecuteTask\36[2018.07.10 00:30:03:749][TraceID: 8HRWSI105YVO91]->RequestExecuteEnd\16[2018.07.10 00:30:03:749][TraceID: 8HRWSI105YVO91]->OutgoingData\26651我想分析组中的每一行-时间,traceid(如果存在)和块名。要选择日期时间(始终存在),我使用\[(.*?)\]。这是第一组。下一个必须为traceid(如果存在)。获取分隔符(?:\[|->| )-[或->或。组选择与第一个相同\[(.*?)\]。然后转到第三组,其名称为块名([a-zA-Z ]+)-结尾的任何文本均不带数字。我对如何连接所有内容完全感到困惑。我想要得到的是:第1组-日期时间第2组-Traceid | 零组3-块名称
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

这应该可以解决问题:^\[(.*?)\](?:\[(.*?)\])?->([a-zA-Z ]+)。确保您使用的是多行标志。这是一个Python演示:


>>> for x in re.finditer(r'^\[(.*?)\](?:\[(.*?)\])?->([a-zA-Z ]+)', file, re.M):

    print(x.group(1), x.group(2), x.group(3))

2018.07.10 00:30:03:109 TraceID: 8HRWSI105YVO91 IncomingTime

2018.07.10 00:30:03:109 TraceID: 8HRWSI105YVO91 IncomingData

2018.07.10 00:30:03:109 TraceID: 8HRWSI105YVO91 ThreadID

2018.07.10 00:30:03:109 TraceID: 8HRWSI105YVO91 RequestExecuteStart

2018.07.10 00:30:03:109 TraceID: 8HRWSI105YVO91 RequestInfo

2018.07.10 00:30:03:109 TraceID: 8HRWSI105YVO91 CheckUserInfo

2018.07.10 00:30:03:218 None Start RTS

2018.07.10 00:30:03:640 TraceID: 8HRWSI105YVO91 StartExecuteTask

2018.07.10 00:30:03:749 TraceID: 8HRWSI105YVO91 EndExecuteTask

2018.07.10 00:30:03:749 TraceID: 8HRWSI105YVO91 RequestExecuteEnd

2018.07.10 00:30:03:749 TraceID: 8HRWSI105YVO91 OutgoingData

您可以使用来只给您实际的跟踪ID ^\[(.*?)\](?:\[TraceID: (.*?)\])?->([a-zA-Z ]+)。


查看完整回答
反对 回复 2021-04-19
  • 1 回答
  • 0 关注
  • 252 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信