正则表达式组选择

我陷入了日志解析的困境。我在日志文件中有此行。一切都以行结尾\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-块名称


凤凰求蛊
浏览 253回答 1
1回答

萧十郎

这应该可以解决问题:^\[(.*?)\](?:\[(.*?)\])?->([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 IncomingTime2018.07.10 00:30:03:109 TraceID: 8HRWSI105YVO91 IncomingData2018.07.10 00:30:03:109 TraceID: 8HRWSI105YVO91 ThreadID2018.07.10 00:30:03:109 TraceID: 8HRWSI105YVO91 RequestExecuteStart2018.07.10 00:30:03:109 TraceID: 8HRWSI105YVO91 RequestInfo2018.07.10 00:30:03:109 TraceID: 8HRWSI105YVO91 CheckUserInfo2018.07.10 00:30:03:218 None Start RTS2018.07.10 00:30:03:640 TraceID: 8HRWSI105YVO91 StartExecuteTask2018.07.10 00:30:03:749 TraceID: 8HRWSI105YVO91 EndExecuteTask2018.07.10 00:30:03:749 TraceID: 8HRWSI105YVO91 RequestExecuteEnd2018.07.10 00:30:03:749 TraceID: 8HRWSI105YVO91 OutgoingData您可以使用来只给您实际的跟踪ID ^\[(.*?)\](?:\[TraceID: (.*?)\])?->([a-zA-Z ]+)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go