max_mara
@max_mara

Разбор текста регулярным выражением на Scala

Бодрый вечер,

Помогите составить правильную регулярку, что-бы разбить такой текст
-2.0 RCVD_IN_RP_SAFE        RBL: Sender in ReturnPath Safe - Contact
                            safe-sa@returnpath.net
                            [Return Path SenderScore Safe List (formerly]
                    [Habeas Safelist) - <http://www.senderscorecertified.com>]
-3.0 RCVD_IN_RP_CERTIFIED   RBL: Sender in ReturnPath Certified - Contact
                            cert-sa@returnpath.net
                            [Return Path SenderScore Certified {formerly]
                      [Bonded Sender} - <http://www.senderscorecertified.com>]
 0.0 URIBL_BLOCKED          ADMINISTRATOR NOTICE: The query to URIBL was blocked.
                            See
                            http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
                             for more information.
                            [URIs: securepaynet.net]
 0.0 HTML_IMAGE_RATIO_06    BODY: HTML has a low ratio of text to image area
 0.0 HTML_MESSAGE           BODY: HTML included in message
 1.1 MIME_HTML_ONLY         BODY: Message only has text/html MIME parts


Есть еще скриншот здесь

На Seq[String]
  • -2.0 RCVD_IN_RP_SAFE RBL: Sender in ReturnPath Safe — Contact safe-sa@returnpath.net [Return Path SenderScore Safe List (formerly] [Habeas Safelist) — <www.senderscorecertified.com>]
  • ....
  • 0.0 HTML_IMAGE_RATIO_06 BODY: HTML has a low ratio of text to image area


Еще очень похожий пример в SMTP заголовках
Received: from f365.mail.ru (f365.mail.ru. [217.69.141.7])
        by mx.google.com with ESMTPS id m8si4951597lbs.75.2013.07.18.02.42.19
        for <xxxxxxxx@gmail.com>
        (version=TLSv1 cipher=RC4-SHA bits=128/128);
        Thu, 18 Jul 2013 02:42:20 -0700 (PDT)
Received-SPF: pass (google.com: domain of xxxxx@mail.ru designates 217.69.141.7 as permitted sender) client-ip=217.69.141.7;
Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of xxxxxx@mail.ru designates 217.69.141.7 as permitted sender) smtp.mail=xxxxxx@mail.ru;
       dkim=pass header.i=@mail.ru
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail2;
	h=Content-Type:Message-ID:Reply-To:Date:Mime-Version:Subject:To:From; bh=DA3SeGPFw4gtOV39cJaYJXRjKwbhtXq1/TjXi0eSlm0=;
	b=ktnUtYx5gZlvyeE6y79DKGU1Atdl6dqWj5y1LQS03fjdLsZpCml86mcAMMMeRA00bPR/mQ+1mF9ifDAKJgfWFrJAfyNtFecq7lv+MbE3Sq1KM9IxnAVcEWUI9ZGFEzD3tF4vxCuZKwz4OqtO6cIO7+Muss18YJ8csVvKkdQyGsQ=;
  • Вопрос задан
  • 3302 просмотра
Пригласить эксперта
Ответы на вопрос 1
@grender
В регулярках не силен, тек что если что не так простите.

val firstRegExp="""([ -]?\d\.\d.*(?:[\n\r]?[\n\r]?   .*)*)""".r
val spaceRegexp="""[ \n\r]+""".r
val data=scala.io.Source.fromFile("c:/temp/temp.txt").mkString
val result=firstRegExp.findAllIn(data).matchData.map(_.group(1)).toSeq
val finalResult=result.map(ss=>spaceRegexp.replaceAllIn(ss," "))


Я писал под виндой, забив ваш проверочный текст в блокнот. Из-за этого пришлось учесть ее формат перевода строк(блок "[\n\r]?[\n\r]?").
Вырезание лишних пробелов и переноса строк сделаны второй регуляркой, скорее всего можно сделать сразу, но как я уже сказал, регулярки не мой конек. Вообще все это можно забить в аццкий однострочник и радоваться, правда без комментов я бы в таком разбираться не хотел.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы