【问题标题】:Parse email content with Regular Expressions使用正则表达式解析电子邮件内容
【发布时间】:2018-03-30 04:44:12
【问题描述】:

每天我都会收到数千封电子邮件,我想解析这些电子邮件的内容/正文以将它们加载到数据库中。

我的问题是,现在我正在手动解析电子邮件正文,我想将逻辑更改为 C# 中的正则表达式。

这是电子邮件的正文:


Gentilissima Agenzia Nexity Residenziale

请注意:

Sig./Sig.ra :巴勃罗·阿佐林

电子邮件:pabloazorin@gmail.com

电话:02322-498900

sta cercando un immobile con le seguenti caratteristiche:

类别:住宅

Tipologia:别墅

Tipo di contratto:Vendita

市镇:阿萨戈省米兰

Zona:非规范

Fascia di prezzo:非规范


我需要提取粗体文本,我认为 RegEx 是我需要的...

期待收到您关于如何使其发挥作用的建议。

谢谢!

--巴勃罗

【问题讨论】:

    标签: c# email-parsing


    【解决方案1】:

    假设您的电子邮件中不是粗体的部分总是在您的所有电子邮件中出现,您可以使用正则表达式轻松地从电子邮件中获取所有部分:

    Sig\./Sig\.ra :(.*)
    
    Email: (.*)
    
    Tel\.: (.*)
    
    sta cercando un immobile con le seguenti caratteristiche:
    
    Categoria: (.*)
    
    Tipologia: (.*)
    
    Tipo di contratto: (.*)
    
    Comune: (.*)
    
    Zona: (.*)
    
    Fascia di prezzo: (.*)
    

    在 C# 中

    Regex regexObj = new Regex(@"Sig\./Sig\.ra :(.*)
    
    Email: (.*)
    
    Tel\.: (.*)
    
    sta cercando un immobile con le seguenti caratteristiche:
    
    Categoria: (.*)
    
    Tipologia: (.*)
    
    Tipo di contratto: (.*)
    
    Comune: (.*)
    
    Zona: (.*)
    
    Fascia di prezzo: (.*)");
    Match matchObj = regexObj.Match(subjectString);
    string Sig = matchObj.Groups[1].Value;
    string Email = matchObj.Groups[2].Value;
    // and so on to get all the other parts
    

    【讨论】:

      【解决方案2】:

      阅读Mastering Regular Expressions。它将教你完成这个和其他类似的正则表达式问题所需知道的一切,并且会给你足够的理解和洞察力,让你开始编写更复杂的正则表达式。

      【讨论】:

      • 感谢您的快速评论!我很快就会看这本书,但与此同时,我需要尽快完成它。你能给我一个关于如何实施它的建议吗?干杯,--巴勃罗
      【解决方案3】:

      对于电子邮件下载,我使用了 Mailbee .Net 对象。这个库很容易使用并且有据可查。但如果您想避免编程,您也可以使用电子邮件解析器,例如EmailParser2Database

      【讨论】:

        【解决方案4】:

        如果电子邮件始终采用相同的格式,您可以通过多种不同的方式执行此操作。一种简单的方法是在换行符上拆分并在每行上取一个子字符串,从标签之后开始。

        使用正则表达式,您可能会创建一个创建多个命名捕获的正则表达式。然后,您可以索引到每个命名组名称的匹配项的 Groups 属性,以便从中获取值。当然,这有点复杂。

        【讨论】:

        • substring/IndexOf() 方式也比构建复杂的正则表达式更快。
        【解决方案5】:

        我认为将此字符串拆分为行数组会更好 您可以使用所有标题作为键来初始化字典 您将从字典中搜索每一行的标题(例如“电子邮件:”),然后将结果作为值放回字典中 最后,您将拥有一本包含所有标题和值的字典。 我认为您不需要正则表达式。 实际上这样标题的顺序就无关紧要了。

        【讨论】:

          【解决方案6】:

          我们发现对于垃圾邮件过滤和其他大容量应用程序,正则表达式在解析 MIME 标头时有点慢,这是您想要做的。代码有些专业,但我写了一个C state machine for doing the parsing,它的速度与您无需使用 re2c 之类的东西一样快。该代码不适合胆小的人,但速度非常快。

          对于电子邮件,我认为您会发现显式状态机比正则表达式更易于使用。这也是 goto 语句的最后避难所!

          【讨论】:

            【解决方案7】:

            您真的不想手动执行此操作,也不想使用正则表达式。有许多不同的方法可以对电子邮件中的数据进行编码,并且许多不严格符合规范的电子邮件仍然可以被解析。我在 .NET 环境中使用AnPOP 取得了成功。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-08-28
              • 1970-01-01
              • 2016-04-11
              • 1970-01-01
              • 1970-01-01
              • 2011-04-22
              • 1970-01-01
              相关资源
              最近更新 更多