我可以为re.findall()添加一个例外吗?

时间:2018-01-09 22:43:46

标签: python regex

我目前有一个python程序,它使用正则表达式来列出文档中的所有电子邮件地址,并将它们分别放在新文档中。像这样工作:

with open (self.originalEntry.get(), 'r') as doc:
    text = doc.read()
match = re.findall(r'[\w\.-]+@[\w\.-]+', text)
with open (self.namesEntry.get(), 'a') as pi:
    for i in match:   
        i = str(i)
        pi.write(i+ '\n')

我想更改它以列出每个电子邮件地址,但来自给定域的电子邮件地址(即anyone@thiswebsite.com)。我一直在寻找我能找到的所有内容python网站上的RE运营商无法找到构建re.findall运营商例外的方法。是否可以编写一个表达式来查找所有电子邮件地址减去某个域中的电子邮件地址,或者我应该做些什么呢?

2 个答案:

答案 0 :(得分:0)

为什么不将该域名的电子邮件地址写入self.namesEntry.get()

with open (self.originalEntry.get(), 'r') as doc:
    text = doc.read()
match = re.findall(r'[\w\.-]+@[\w\.-]+', text)
with open (self.namesEntry.get(), 'a') as pi:
    for i in match:   
        i = str(i)
        if 'thiswebsite' not in i:
            pi.write(i+ '\n')

答案 1 :(得分:0)

您可以使用“否定前瞻” - (?!)

[\w\.-]+@(?!thiswebsite\.com)[\w\.-]+

如果(?!)的内容不匹配,这会导致表达式匹配。此外,它不消耗任何字符 - 因此它允许表达式的其余部分像以前一样工作。

参见工作示例:https://regex101.com/r/mkEN3E/1