【问题标题】:Can I add an exception to re.findall()我可以向 re.findall() 添加一个例外吗
【发布时间】:2018-01-09 22:43:45
【问题描述】:

我目前有一个 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')

我想对其进行更改以列出每个电子邮件地址除了来自给定域(即 any@thiswebsite.com)的电子邮件地址。我一直在寻找有关 RE 运营商的所有信息在 python 的站点上,并且无法找到一种方法来构建 re.findall 运算符的异常。是否可以通过这种方式编写一个表达式来查找所有电子邮件地址减去某个域中的电子邮件地址,还是我应该做其他事情?

【问题讨论】:

标签: python regex


【解决方案1】:

为什么不直接将具有该域的电子邮件地址写入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')

【讨论】:

    【解决方案2】:

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

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

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

    查看工作示例:https://regex101.com/r/mkEN3E/1

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 2016-12-19
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多