【发布时间】:2018-03-14 07:49:08
【问题描述】:
我需要在 python 中创建一个正则表达式,它可以获取以下示例并拆分每个日志条目。我使用日期来识别每个日志条目的开头,但它只能获取从日期开始到第一行结尾的单行。它完全错过了所有堆栈跟踪内容。我想要所有的日志条目,因为有很多重复的日志记录,我希望能够过滤掉重复并将其减少到少数独特的日志条目。一旦我确定了一个日志条目,我还希望能够删除关于字符串的任何独特内容,例如日期时间戳,以便比较函数可以将其标记为重复项。我尝试使用积极的前瞻和多行标志,但无济于事。有人知道我想做什么吗?
我尝试过的一些正则表达式
^\d{4}-\d{2}-\d{2}.*\(.*\)$ // it matches single line date to parenthesis
^(\d{4}-\d{2}-\d{2}|\s|).*\)$ // matches single line with tabs - not much better
^\d{4}-\d{2}-\d{2}.*(?=\d{4}-\d{2}-\d{2}) // positive lookahead but barely works
示例字符串:
2018-03-06 11:36:40:048 INFO:Starting. (com.X.s.f.o.o)
2018-03-06 11:36:42:931 SEVERE: Error attempting to s: StatusRuntimeException (com.Y.W.Z_H.ZHGC.sHToVe)
io.G.StatusRuntimeException: EXCEEDED
at io.G.stub.CCalls.toStatusRuntimeException(CCalls.java:227)
at io.G.stub.CCalls.getUnchecked(CCalls.java:208)
at io.G.stub.CCalls.blockingUnaryCall(CCalls.java:141)
2018-03-06 11:36:46:159 SEVERE: Error attempt: StatusRuntimeException (com.Y.W.Z_H.ZHGC.sHToVe)
io.G.StatusRuntimeException: EXCEEDED
at io.G.stub.CCalls.toStatusRuntimeException(CCalls.java:227)
at io.G.stub.CCalls.getUnchecked(CCalls.java:208)
at io.G.stub.CCalls.blockingUnaryCall(CCalls.java:141)
2018-03-06 11:36:46:824 SEVERE: getConfigInteger(): eGSWindowsPortNumber (com.Y.W.Y_Z_config_s.YZConfigs.getInteger)
2018-03-06 11:36:46:844 SEVERE: Failed to get (com.Y.W.Z_H.ZHGC.create)
期望的输出:
第 1 场比赛:
INFO:Starting. (com.X.s.f.o.o)
第 2 场比赛:
SEVERE: Error attempting to s: StatusRuntimeException (com.Y.W.Z_H.ZHGC.sHToVe)
io.G.StatusRuntimeException: EXCEEDED
at io.G.stub.CCalls.toStatusRuntimeException(CCalls.java:227)
at io.G.stub.CCalls.getUnchecked(CCalls.java:208)
at io.G.stub.CCalls.blockingUnaryCall(CCalls.java:141)
第 3 场比赛:
SEVERE: Error attempt: StatusRuntimeException (com.Y.W.Z_H.ZHGC.sHToVe)
io.G.StatusRuntimeException: EXCEEDED
at io.G.stub.CCalls.toStatusRuntimeException(CCalls.java:227)
at io.G.stub.CCalls.getUnchecked(CCalls.java:208)
at io.G.stub.CCalls.blockingUnaryCall(CCalls.java:141)
第 4 场比赛:
SEVERE: getConfigInteger(): eGSWindowsPortNumber (com.Y.W.Y_Z_config_s.YZConfigs.getInteger)
第 5 场比赛:
SEVERE: Failed to get (com.Y.W.Z_H.ZHGC.create)
【问题讨论】:
标签: python regex logging multiline