2012-06-13 109 views
3

我想弄清楚Ruby 1.8.7的正則表達式,用於從電子郵件中刪除線程。爲此,我需要刪除與線程模式匹配的郵件邊界之間的所有內容,例如,在Mac Mail上,我需要刪除粗體文本(示例HTML被簡化以避免使用大量空間,真實郵件' HTML是遠不如簡潔):正則表達式匹配ruby中的行之間的內容

 
From: XXXX 
... mail headers ... 
Content-Type: multipart/alternative; 
    boundary="Apple-Mail=_EFA7D6C2-C778-4C8E-AA13-C97DF1FA9036" 
... more mail headers ... 

--Apple-Mail=_EFA7D6C2-C778-4C8E-AA13-C97DF1FA9036 
Content-Transfer-Encoding: quoted-printable 
Content-Type: text/plain; 
    charset=us-ascii 

New comment added from Mac Mail 

On 12/06/2012, at 12:51, [email protected] wrote: 

> Thread 
> text 
> to be 
> removed 
>=20 

--Apple-Mail=_EFA7D6C2-C778-4C8E-AA13-C97DF1FA9036 
Content-Transfer-Encoding: quoted-printable 
Content-Type: text/html; 
    charset=us-ascii 

<html>... lots of HTML... 

<span>On 12/06/2012, at 12:51, [email protected] wrote:</span> 

<span> Thread </span> 
<span> text </span> 
<span> to be </span> 
<span> removed </span> 
<span>=20 </span> 
</html>= 

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

正則表達式我以爲會獲取所需的文字是:

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

但這不是工作作爲從邊界正確捕捉到第一「開」

回答

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 

無需爲此執行前瞻/後退。

0

下面是兩個正則表達式,它們將與文本匹配。你可以從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)*)/

這應該是一個良好的開端,但還有待改進,以便更爲通用,但由於我們只知道一個例子,我剛剛寫了這個工作的那!

參考

+0

對不起,我應該補充說,這個例子實際上是一個真正的電子郵件的簡化。問題已更新。 – Anero

相關問題