【问题标题】:Regex: Match IP address except when preceded by certain characters?正则表达式:匹配 IP 地址,除非前面有某些字符?
【发布时间】:2015-08-28 00:30:35
【问题描述】:

这个正则表达式 ([a-z0-9]{1,4}:+){3,5}[a-z0-9]{1,4}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} 几乎只匹配 IP 地址(v4 和 v6),但不幸的是,对于下面的文本和类似的文本,它也会选择 bold:


来自 mail.example.com (example.com. [213.239.250.131]) 带有 ESMTPS id 的 mx.google.com xc4si15480310lbb.82.2014.10.26.06.16.58 为 (版本=TLSv1.2 密码=ECDHE-RSA-AES128-GCM-SHA256 位=128/128); 2014 年 10 月 26 日星期日 06:16:58 -0700 (PDT)

收到:来自 mail.supershuttle.com 的 ssservices1-1 (192.168.20.142) (192.168.20.110),Microsoft SMTP 服务器 ID 14.2.347.0;周二,21 2015 年 4 月

收到:来自 mail.supershuttle.com 的 ssservices1-1 (192.168.20.142) (192.168.20.110) 与 Microsoft SMTP (TLS) 服务器 ID 14.2.347.0; 2015 年 4 月 21 日,星期二

收到:来自 plug.mysitehosted.com (plug.mysitehosted.com [10.248.1.153]) (使用带有密码 DHE-RSA-AES256-SHA 的 TLSv1) 由 0.0.0.0:2500 (trex/5.0.19); 格林威治标准时间 2014 年 3 月 11 日星期二 06:14:03


省略这些匹配项的最佳方法是什么(我将使用 Python)?两个前面是文本 'id',但在第一种情况下,不是 直接 在它前面。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    作为附加提示,您可以添加正向和反向查找。它们可以让您在不消耗任何东西的情况下查看比赛前后的情况。你的IP总是被()[]包围,所以你可以试试:

    (?<=\[|\()your regex(?=\]|\))
    

    这将在两者中匹配your regex

    (your regex)
    [your regex]
    

    【讨论】:

      【解决方案2】:
      ([a-z0-9]{1,4}:+){3,5}[a-z0-9]{1,4}|(?<!id )(?<!\.)\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b(?!\.)
      

      你可以试试这个。通过lookaheads,我们确保IP地址前面或后面没有.。参见演示。

      https://regex101.com/r/hI0qP0/3

      【讨论】:

        猜你喜欢
        • 2017-05-09
        • 2021-07-29
        • 2020-02-04
        • 2011-03-01
        • 2012-04-27
        • 1970-01-01
        • 2010-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多