Шаблон регулярных выражений для извлечения данных электронной почты - PullRequest
1 голос
/ 08 сентября 2010

Я получаю необработанный текст (включая заголовок и сообщение) с POP-сервера.Мне нужно захватить все после заголовка, который заканчивается пустой строкой между ним и сообщением пользователя.

В то же время я хочу игнорировать что-либо из оригинальных сообщений, если это ответ.Начало ответа на письма, которые я анализирую, начинается с

------Original Message------

Пример письма может выглядеть следующим образом

Return-Path: ...
...
Больше метаданных электронной почты: ...

Здравствуйте, regex land, я рад вас слышать.
------ Исходное сообщение ------
Метаданные: ...
...

Привет, чувак, ты можешь мне помочь?Спасибо!

С уважением, Я.

Мне нужно извлечь "Привет из страны регулярных выражений, я рад услышать от вас."и любой другой текст / строки, предшествующие исходному сообщению.

Я сейчас использую это регулярное выражение (C # в многострочном режиме), и, похоже, оно работает, за исключением его захвата ------ Исходное сообщение------ если тело пустое.Вместо этого я предпочел бы просто пустую строку.

^\s*$\n(.*)(\n------Original Message------)?

Редактировать
Я не голосовал ни за кого, и если вам случается понизить голос, обычно полезно добавить комментарии.

Ответы [ 3 ]

0 голосов
/ 08 сентября 2010

Причина этого в том, что у вас есть лишние \n в скобках.Если тело пустое, там нет новой строки.Поэтому попробуйте следующее:

^\s*$\r\n(.*)(^------Original Message------$)?

Если вы не хотите, чтобы новая строка была в конце тела, вы все равно можете использовать string.Trim() для соответствующей части.

Примечание: Предполагается, что для ввода используются \r\n терминаторы строки (что требуется в заголовках электронной почты в соответствии со стандартом MIME).

0 голосов
/ 08 сентября 2010

Вам нужно заменить (\n------Original Message------) на (?=(\n------Original Message------)) lookahead, чтобы не вернуть эту часть, просто чтобы убедиться, что она есть

0 голосов
/ 08 сентября 2010

Почему бы вам не использовать DotnetOpenMail ? Использование регулярных выражений для этого является неправильным подходом, лучше было бы вместо этого использовать выделенный обработчик электронной почты ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...