【问题标题】:Python Regex to parse email URLs but excluding the public emailPython Regex 解析电子邮件 URL 但不包括公共电子邮件
【发布时间】:2015-12-22 15:19:34
【问题描述】:

我正在解析一个包含以下条目的文件:

xxx-yy.biz.  39405   A   156.154.66.33
mail.global.com.   3464    A   115.113.9.64
xyx xyx xyx
webmail.xyz.com.  1463    A   115.113.9.64
gmail.com.   3464    A   115.113.9.22

我正在尝试提取带有字符串“mail”的 URL 及其 IP 地址:

for line in (dnsfile):
            match = re.search(r'(.*mail.*?)\s+(.*)\s+A\s+(.*)', line)

并且 match.group(1) 和 match.group(2) 给了我 URL 和 IP。

我想扩大这个搜索范围,这样我就不想解析公共电子邮件,例如:gmail、hotmail、yahoo、mail。更一般:排除此中的单词列表 搜索。

【问题讨论】:

标签: python regex


【解决方案1】:

如果不需要将它作为正则表达式的一部分,您可以进行简单的数组搜索

nothanks = ['gmail.com', 'hotmail.com']
for line in (dnsfile):
    match = re.search(r'(.*mail.*?)\.\s+(.*)\s+A\s+(.*)', line)
    if match:
        if not match.group(1) in nothanks:
            print match.group(1)

【讨论】:

    【解决方案2】:

    您可以使用负向查看,但您需要添加开始和结束锚点,因此您还需要re.DOTALL 标志(使锚点从每行的开始和结束匹配),您可以创建负向查看- 使用| 加入单词列表:

    re.search(r'^(?!{})(.*mail.*?)\s+(.*)\s+A\s+(.*)$'.format('|'.join(list_of_domin)),line,re.DOTALL)
    

    查看演示https://regex101.com/r/bF5xQ3/1

    【讨论】:

    • @HasanRamezani 谢谢,我认为环顾四周是正则表达式世界的骑士! ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    相关资源
    最近更新 更多