0

今朝、これを機能させようとして、ばかげたことに夢中になっています。

メールの境界文字列を使用して、テキスト/プレーンとテキスト/html の部分に分割しようとしています。これを行うためのライブラリがあることは知っていますが、WinRT で機能するものはありません。

これが私が持っているものです。私は正規表現が苦手なので、おそらくあらゆる種類の間違いです:

サンプルデータ

From: Rory <me@gmail.ftw>
Date: Mon, 8 Oct 2012 17:05:48 +0100
Message-ID: <a1b2c3d4e5f6g7h8i9j10a1b2c3d4e5f6g7h8i9j10@mail.gmail.ftw>
Subject: Subject of my email
To: me@gmail.ftw

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

抽出しようとしています

  1. --bcaec54fbd3a824f3504cb8e677d 境界マーカー間の両方のセクション
  2. これらの各セクションの Content-Type、charset、および Content-Transfer-Encoding
  3. Content 自体 (Content-Transfer-Encoding の下、次の境界まで)

正規表現コード

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); 

これは、最後の境界文字列を省略した場合にのみ、両方の部分に一致します。含めると、最初の部分のみに一致します。壊し始める前に誰か助けてくれませんか

更新: サンプルデータを追加、削減

4

2 に答える 2

1

正規表現パターンを使用

"(--" + 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)"

RegexOptions.Singlelineオプション/フラグ付き。

于 2012-10-22T13:45:07.963 に答える
0

SingleLine オプションでこの正規表現を試してください。

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

ここRegexHeroでテストしてください

于 2012-10-22T14:09:36.287 に答える