Python Regex解析电子邮件URL但不包括公共电子邮件

时间:2015-09-24 21:27:15

标签: python regex

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

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。更一般:排除此列表中的单词 搜索范围。

2 个答案:

答案 0 :(得分:1)

你可以使用负向前看,但是你需要添加开始和结束锚点,这样你也需要re.DOTALL个标志(让锚点与每一行的开头和结尾相匹配),你可以创建你的使用|加入单词列表时出现负面预测:

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

请参阅演示https://regex101.com/r/bF5xQ3/1

答案 1 :(得分:0)

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

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)