【发布时间】:2016-03-07 13:49:50
【问题描述】:
我正在使用 python 来解析 Postfix 日志文件。我需要匹配包含多个模式中的任何一个的行,如果行匹配,则提取 IP 地址
ip = re.search('^warning: Connection rate limit exceeded: [0-9]* from .*\[([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\] for service smtp', message)
if not ip:
ip = re.search('^NOQUEUE: reject: RCPT from .*\[([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\]: .*: Relay access denied; .*', message)
if not ip:
ip = re.search('^NOQUEUE: reject: RCPT from .*\[([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\]: .*: Recipient address rejected: .*', message)
...
...
print ip.group(1)
任何一行都只会匹配一个模式。我知道通常我可以使用 '(pattern1|pattern2|pattern3)' 来匹配多个模式中的任何一个,但是由于我已经使用括号 () 来对要提取的 IP 地址进行分组,所以我不知道如何这样做。
我将有很多模式要匹配。最干净/优雅的方式是什么?
【问题讨论】:
-
请包括您的输入、当前输出和预期输出。