正则表达式解析思科日志消息

时间:2018-09-03 15:52:45

标签: regex

我正在尝试编写一个正则表达式,它将正确解析以下思科日志消息:

<191>45902: DC-SWITCH2: Aug 30 18:15:16.478: %SFF8472-3-THRESHOLD_VIOLATION: Te0/2: Rx power high warning; Operating value:  -0.8 dBm, Threshold value:  -1.0 dBm.

所需的输出:

Te0/2: Rx power high warning; Operating value:  -0.8 dBm, Threshold value:  -1.0 dBm.

并且:

<191>45902: DC-SWITCH2: Aug 31 19:17:30.147:  sensor num : 10 sensor_value :33, high :110 low:85

所需的输出:

sensor num : 10 sensor_value :33, high :110 low:85

我为第一种情况开发了以下正则表达式,但是我无法理解如何将助记符%STRING部分设为可选:

>\d+:\s.+?:\s.+?(?=:\s):\s%.+?(?=:\s):?\s(.+)

对于第一个示例,它返回期望的结果,但是对于第二个示例,我得到:

10 sensor_value :33, high :110 low:85

2 个答案:

答案 0 :(得分:0)

您要使检查%STRING的部分不会被捕获。 像这样:

>\d+:\s.+?:\s.+?(?=:\s):\s(?:%.+?:)?\s(.+)

请参见https://regex101.com/r/F30ALK/1

答案 1 :(得分:0)

为什么不尝试类似的东西

\d{2}:\d{2}:\d{2}.\d{3}.*? (\b[A-Za-z].*)

所需的输出将在第1组中。

示例显示here