Skip to main content
 首页 » 编程设计

Python:如何最好地将两个正则表达式组合成一个模式匹配

2024年08月25日28rubylouvre

给定 Receive 类型的电子邮件 header 字段列表,例如:

Received: by 10.194.174.73 with SMTP id bq9csp183244wjc; 
        Mon, 5 May 2014 17:49:10 -0700 (PDT) 
X-Received: by 10.180.14.233 with SMTP id s9mr18354760wic.53.1399337350112; 
        Mon, 05 May 2014 17:49:10 -0700 (PDT) 
Received: from mail-wg0-f52.google.com 
Received: by mail-ie0-x247.google.com with SMTP id gx4so163592215ieb.1 
        for <myemailaddress@gmail.com>; Mon, 01 Jun 2015 18:34:50 -0700 (PDT) 

每个字段通过 IP 地址或域名报告“跃点”。我希望构建一个可以兼顾两者的正则表达式。

以下正则表达式将分别提取 IP 地址和 (gmail) 域名:

\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b 
mail.*com 

在 Python 中组合两个或多个模式的最优雅的方法是什么?我将遍历 Receive 字段列表并对每个字段运行正则表达式。

请您参考如下方法:

为什么不使用交替?

patterns = [r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b", r"mail.*com"] 
pattern = "|".join(patterns)  # pattern1|pattern2|pattern3|... 
 
re.findall(pattern, text) 

产量

['10.194.174.73', 
 '10.180.14.233', 
 'mail-wg0-f52.google.com', 
 'mail-ie0-x247.google.com', 
 'mailaddress@gmail.com']