每天我收到数以千计的电子邮件,我想解析这些电子邮件的内容/正文,将它们加载到数据库中。
我的问题是,现在我正在手动解析电子邮件正文,我想将逻辑更改为C#中的正则表达式。
以下是电子邮件的正文:
Gentilissima Agenzia Nexity Residenziale
il nostro utente:
Sig./Sig.ra: Pablo Azorin
电子邮件: pabloazorin@gmail.com
电话: 02322-498900
sta cercando un immobile con le seguenti caratteristiche:
分类: Residenziale
Tipologia:别墅
Tipo di contratto: Vendita
Comune:Assago Prov。的米兰
Zona:非特定数据
Fascia di prezzo: non specificata
我需要以粗体提取文本,我认为RegEx是我需要的......
期待获得有关如何使其有效的建议。
谢谢!
- 巴勃罗
答案 0 :(得分:3)
假设您的电子邮件中非粗体的部分始终与您的所有电子邮件中的部分相同,您可以使用正则表达式轻松抓取电子邮件中的所有部分:
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
答案 1 :(得分:2)
阅读Mastering Regular Expressions。它将教你完成这个和其他类似的正则表达式问题所需要知道的一切,并且会给你足够的理解和洞察力,让你开始编写更复杂的正则表达式。
答案 2 :(得分:2)
对于电子邮件下载,我使用了Mailbee .Net对象。该库非常易于使用,并且有很好的文档。但是如果你想避免编程,你也可以使用像EmailParser2Database这样的电子邮件解析器。
答案 3 :(得分:1)
如果电子邮件始终采用相同的格式,您可以通过多种不同方式执行此操作。一种简单的方法是在换行符上拆分并在每行上取一个子串,从标签开始。
使用正则表达式,您可能会创建一个创建一些命名捕获的正则表达式。然后,您可以在每个命名组的名称上索引匹配的Groups属性,以便从中获取值。当然,这有点复杂。
答案 4 :(得分:1)
我认为将这个字符串拆分成一个行数组要好得多 您可以初始化一个包含所有标题作为键的字典 然后你将从字典中搜索每一行的标题(例如“电子邮件:”),然后你把结果放回字典作为值 最后你会得到一本包含所有标题和价值的字典。 我认为你不需要正则表达式。 实际上,标题的顺序并不重要。
答案 5 :(得分:0)
我们发现,对于垃圾邮件过滤和其他大批量应用程序,解析MIME标头的正则表达式有点慢,这就是您想要做的。代码有点专业,但是我写了一个C state machine for doing the parsing,它的速度和你得到的一样快,而不会像re2c那样。该代码不适合胆小的人,但速度非常快。
对于电子邮件,我认为您会发现显式状态机比正则表达式更容易使用。它也是goto声明的最后避难所!
答案 6 :(得分:0)
您真的不想手动或使用正则表达式执行此操作。在电子邮件中编码数据有许多不同的方法,许多电子邮件并不严格符合仍然可以解析的规范。我在.NET环境中使用AnPOP取得了成功。