2008-12-13 4 views
2

Chaque jour, je reçois des milliers d'e-mails et je veux analyser le contenu/corps de ces e-mails pour les charger dans une base de données.Analyser le contenu de l'e-mail avec les expressions régulières

Mon problème est que de nos jours j'analyse le corps de l'e-mail manuellement et je voudrais changer la logique à Expression régulière en C#.

Voici le corps des e-mails:


Gentilissima Agence Nexity Residenziale

il nostro utente:

Sig./Sig.ra: Pablo Azorin

E-mail: [email protected]

Tél .: 02322-498900

sta cercando immobile un con le seguenti caratteristiche:

Categoria: Residenziale

Tipologia: Villa

Tipo di Contratto : Vendita

Comune: Assago Prov. Milano

Zona: non specificata

Fascia di prezzo: non specificata


je dois extraire le texte en gras et je pensais un RegEx est ce que je dois pour this ...

Dans l'attente d'obtenir votre suggestion sur la façon de le faire fonctionner.

Merci!

--Pablo

Répondre

2

Lire Mastering Regular Expressions. Il vous apprendra tout ce que vous devez savoir pour résoudre ce problème de regex et d'autres similaires, et vous donnera une compréhension et une compréhension suffisantes pour vous permettre de commencer à écrire des expressions régulières beaucoup plus compliquées.

+0

Merci pour votre commentaire rapide! Je vais jeter un coup d'oeil à ce livre sous peu, mais en attendant, je devrais le faire le plus tôt possible. Pouvez-vous s'il vous plaît me donner un conseil sur la façon de l'implémenter? Cheers, --Pablo –

1

Si les e-mails sont toujours dans le même format, vous pouvez le faire de différentes manières. Une manière simple de le faire serait de diviser sur le retour à la ligne et de prendre une sous-chaîne sur chaque ligne, en commençant après l'étiquette. Avec les regex, vous créez probablement une regex qui crée un nombre de captures nommées. Vous pouvez ensuite indexer dans la propriété Groups de la correspondance sur le nom de chaque groupe nommé afin d'en extraire la valeur.C'est un peu plus complexe, bien sûr.

+0

La méthode substring/IndexOf() serait également plus rapide que la construction d'une regex complexe. – Tomalak

0

Nous avons constaté que pour le filtrage du spam et d'autres applications à volume élevé, les expressions régulières sont un peu lentes pour analyser les en-têtes MIME, ce que vous voulez faire. Le code est quelque peu spécialisé, mais j'ai écrit un C state machine for doing the parsing qui est aussi rapide que vous obtiendrez sans aller à quelque chose comme re2c. Le code n'est pas pour les faibles de cœur, mais il est incroyablement rapide.

Pour les e-mails, je pense que vous trouverez une machine à états explicite plus facile à utiliser que des expressions régulières. C'est aussi le dernier refuge de la déclaration goto!

3

En supposant que les parties dans votre e-mail qui ne sont pas gras apparaissent toujours comme ça dans tous vos e-mails, vous pouvez facilement saisir toutes les pièces de votre e-mail avec le regex:

Sig\./Sig\.ra :(.*) 

Email: (.*) 

Tel\.: (.*) 

sta cercando un immobile con le seguenti caratteristiche: 

Categoria: (.*) 

Tipologia: (.*) 

Tipo di contratto: (.*) 

Comune: (.*) 

Zona: (.*) 

Fascia di prezzo: (.*) 

En 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 
0

Vous ne voulez vraiment pas le faire manuellement, ou avec des expressions régulières. Il existe de nombreuses façons de coder les données dans un e-mail et de nombreux e-mails qui ne sont pas strictement conformes à la spécification qui peut encore être analysée. J'ai eu du succès avec AnPOP dans un environnement .NET.

1

Je pense qu'il vaudra beaucoup mieux diviser cette chaîne en un tableau de lignes vous pouvez initialiser un dictionnaire avec tous les titres que les clés et vous recherchera chaque ligne pour le titre du dictionnaire ("Email:" par exemple), puis vous mettez le résultat dans le dictionnaire dans la valeur à la fin, vous aurez un dictionnaire avec tous les titres et les valeurs. Je pense que vous n'avez pas besoin d'une regex pour cela. en fait de cette façon l'ordre des titres ne compte pas.

2

Pour l'email de téléchargement j'ai utilisé des objets de Mailbee .Net. Cette bibliothèque est assez facile à utiliser et est bien documentée. Mais si vous voulez éviter la programmation, vous pouvez également utiliser un analyseur d'email comme EmailParser2Database.

Questions connexes