2012-06-13 64 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

相关问题