2012-10-22 5 views
0

Aller batshit folle essayant de faire ce travail ce matin. J'utilise la chaîne de limites d'un courriel pour essayer de le scinder en parties texte/texte et texte/html. Je sais qu'il existe des bibliothèques pour cela, mais aucune ne fonctionne dans WinRT.Motif Regex pour analyser les sections MIME dans C#/winrt

Voici ce que j'ai. Je suce à regex, il est donc probablement toutes sortes de mal:

données Exemples

From: Rory <[email protected]> 
Date: Mon, 8 Oct 2012 17:05:48 +0100 
Message-ID: <[email protected]> 
Subject: Subject of my email 
To: [email protected] 

Content-Type: multipart/alternative; boundary=bcaec54fbd3a824f3504cb8e677d 

--bcaec54fbd3a824f3504cb8e677d 

Content-Type: text/plain; charset=ISO-8859-1 
Content-Transfer-Encoding: quoted-printable 

text part of email 

--bcaec54fbd3a824f3504cb8e677d 
Content-Type: text/html; charset=ISO-8859-1 
Content-Transfer-Encoding: quoted-printable 

<html> 
    <strong>HTML part of email</strong> 
</html> 

--bcaec54fbd3a824f3504cb8e677d-- 

Je suis en train d'extraire

  1. les deux parties entre la borne --bcaec54fbd3a824f3504cb8e677d
  2. Content-Type, charset et Content-Transfer-Encoding de chacune de ces sections
  3. Le contenu lui-même (ci-dessous le Content-Transfer-Encoding, jusqu'à la n poste frontière

code Regex

string b = "bcaec54fbd3a824f3504cb8e677d"; 
Regex r = new Regex(
"(--" + b + "\r?\nContent-Type: (text/plain|text/html); charset=(.+?)\r?\nContent-Transfer-Encoding: (.+?)\r?\n(.*?--" + b + "))", 
RegexOptions.Singleline); 

Cela correspond à deux parties que si je quitte la chaîne limite à la fin. Si je l'inclut, il ne correspond qu'à la première partie. Quelqu'un peut-il me aider s'il vous plaît avant de commencer les choses fracassant

MISE À JOUR: ajoutée données échantillon, réduit

+0

mis à jour avec les données de l'échantillon, ont essayé de le rendre un peu plus clair grâce – roryok

Répondre

1

Utiliser modèle regex

"(--" + b + "(?:\r?\n)+Content-Type:\s+([^;]+);\s+charset=([^\s\n\r]+)(?:\r?\n)+Content-Transfer-Encoding:\s([^\s\n\r]+)(?:\r?\n){2,}.*?)(?=\r?\n--" + b + "(?:--)?\r?\n)" 

avec RegexOptions.Singleline option/drapeau.

+0

, qui ont travaillé. effondrement évité. – roryok

0

Essayez cette regex avec option SingleLine:

--bcaec54fbd3a824f3504cb8e677d\r?\n\s*(Content-Type:\s*([^;]+);\s*charset=(\S+)\r?\n+Content-Transfer-Encoding:\s*(\S+)\r?\n\s*(.*?))\s*(?=--bcaec54fbd3a824f3504cb8e677d) 

Testez ici à RegexHero