0

我有一个解析日志文件的脚本,在编程的一部分中,我必须知道是否传输了消息,通过阅读这些行,我可以获得消息 ID 并知道消息是否被传输。

01:09:25.258 mta   Messages       I Doc O:NVS:SMTP/alarm@yyy.xx R:NVS:SMS/+654811 mid:6261
01:09:41.965 mta   Messages       I Rep 6261 OK, Message received(ID: 26)
08:14:14.469 mta   Messages       I Doc O:NVS:SMTP/alarm@xxxx.en R:NVS:SMS/+654646 mid:6262
08:14:30.630 mta   Messages       I Rep O:NVS:SMTP/alarm@azea.er R:NVS:SMS/+304859 mid:6262
08:14:30.630 mta   Messages       I Rep 6262 Error while transmitting (ID: 28)

我感兴趣的行是第二行和最后一行,我想提取 6261 和它之后的 ok 和最后一行相同

4

2 回答 2

5

你不需要正则表达式。只需在空白处拆分行。

>>> line.split(None, 5)
['10:56:45.255', 'Message', 'I', 'Rep', '2559', 'OK, Message received']

由于您只需要 ID 和消息:

>>> [line.split(None, 5)[-2:] for line in file.readlines()]
[['2548', 'OK'], ['2559', 'OK, Message received'], ['2560', 'Error'], ['2561', 'Transmission... ']]

请注意,消息中的空格不是问题。

于 2013-04-23T11:35:04.320 回答
-1

/[0-9]{4} (.*)/符合目的,但我不知道这对你来说是否足够通用。根据行 ID(2548 等)是否也可以更短,正则表达式必须稍微调整,但从显示的 4 行来看,这将起作用。

在编写正则表达式时,最重要的是不要仅从“样本”开始工作,还要从关于您尝试匹配的字符串的“可用假设”开始工作。我不能可靠地说这个解决方案完美地解决了你的问题,因为我不知道整个问题,因此无法提供完美的模式。

于 2013-04-23T11:33:32.087 回答