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

Ok, поэтому решение этого было довольно просто, я закончил с выражением, как следующее:

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