3

メールからスレッドを削除するための Ruby 1.8.7 の正規表現を見つけようとしています。そのためには、スレッド パターンに一致するメール境界間のすべてのコンテンツを削除する必要があります。たとえば、Mac メールでは、太字のテキストを削除する必要があります (サンプル HTML は、多くのスペースを使用しないように簡略化されています。実際のメールの HTMLはるかに簡潔ではありません):

差出人: XXXX
... メールヘッダー ...
コンテントタイプ: マルチパート/オルタナティブ;
  境界="Apple-Mail=_EFA7D6C2-C778-4C8E-AA13-C97DF1FA9036"
... その他のメールヘッダー ...

--Apple-Mail=_EFA7D6C2-C778-4C8E-AA13-C97DF1FA9036
Content-Transfer-Encoding: quoted-printable
コンテンツ タイプ: テキスト/プレーン。
  charset=us-ascii

Mac メールから追加された新しいコメント

2012 年 12 月 6 日 12 時 51 分、XXXX@example.com は次のように書いています。

> スレッド
> テキスト
> なる
>削除されました
>=20

--Apple-Mail=_EFA7D6C2-C778-4C8E-AA13-C97DF1FA9036
Content-Transfer-Encoding: quoted-printable
コンテンツ タイプ: テキスト/html;
  charset=us-ascii

<html>...たくさんのHTML...

<span>2012 年 12 月 6 日 12:51 に、XXXX@example.com は次のように書いています:</span>

<span> スレッド </span>
<span> テキスト </span>
<span> する</span>
<スパン>削除</スパン>
<スパン>=20 </スパン>
</html>=

--Apple-Mail=_EFA7D6C2-C778-4C8E-AA13-C97DF1FA9036--

必要なテキストをキャプチャすると思った正規表現は次のとおりです。

--Apple-Mail=_EFA7D6C2-C778-4C8E-AA13-C97DF1FA9036.+?(\bOn.+?)(?!--Apple-Mail=_EFA7D6C2-C778-4C8E-AA13-C97DF1FA9036)

しかし、これは最初の"On "まで境界からキャプチャするように機能していません。

4

2 に答える 2

1

わかりましたので、これに対する解決策は非常に単純で、最終的には次のような式になりました。

--Apple-Mail=_EFA7D6C2-C778-4C8E-AA13-C97DF1FA9036.+?(On \\d{0,2}[\\/\\-]\\d{0,2}[\\/\\-]\\d{0,4}.+?)--Apple-Mail=_EFA7D6C2-C778-4C8E-AA13-C97DF1FA9036

このために先読み/後読みを実行する必要はありません。

于 2012-06-25T18:49:18.463 に答える
0

テキストに一致する 2 つの正規表現を次に示します。gsub各式で適切な一致グループを抽出できます。

  1. /(^On \d\d\/\d\d\/\d{4}.*$\n(\n>.*$)*\n\n)/
  2. /(<span>On \d\d\/\d\d\/\d{4}.*<\/span>\n\n(<span>.*<\/span>\n)*)/

これは良いスタートになるはずですが、より一般的になるように改善することができますが、私たちが知っているのは 1 つの例しかないため、それに取り組むためにこれを書きました!

参考文献

于 2012-06-13T22:23:34.683 に答える