Шаблон регулярного выражения для извлечения данных электронной почты
Я получаю необработанный текст (включая заголовок и сообщение) с POP-сервера. Мне нужно захватить все после заголовка, который заканчивается пустой строкой между ним и пользовательским сообщением.
В то же время я хочу игнорировать что-либо из оригинальных сообщений, если это ответ. Начало ответа на электронные письма, с которых я начинаю синтаксический анализ
------Original Message------
Пример электронного письма может выглядеть так
Обратный путь:...
...
Больше метаданных электронной почты:...Привет из страны регулярных выражений, я рад услышать от вас.
------Оригинал сообщения------
Метаданные:...
...Привет, чувак, ты можешь мне помочь? Спасибо!
С уважением, Я.
Мне нужно извлечь "Привет из страны регулярных выражений, я рад услышать от вас." и любой другой текст / строки до исходного сообщения.
Я использую это регулярное выражение прямо сейчас (C# в многострочном режиме), и он, кажется, работает, за исключением его захвата ------ Исходное сообщение ------, если тело пустое. Я бы предпочел просто пустую строку вместо этого.
^\s*$\n(.*)(\n------Original Message------)?
редактировать
Я не голосовал ни за кого, и, если вам случится понизить голос, обычно полезно добавить комментарии.
3 ответа
Почему бы вам не использовать DotnetOpenMail? Использование регулярных выражений для этого является неправильным подходом, лучше было бы вместо этого использовать выделенный обработчик электронной почты....
Причина в том, что у вас есть дополнительный \n
внутри скобки. Если тело пустое, там нет новой строки. Поэтому попробуйте это:
^\s*$\r\n(.*)(^------Original Message------$)?
Если вам не нужен перевод строки в конце тела, вы все равно можете использовать string.Trim()
на согласованной части.
Примечание: это предполагает, что вход использует \r\n
ограничители строки (что требуется в заголовках электронной почты в соответствии со стандартом MIME).
Вам нужно заменить (\n------Original Message------)
с (?=(\n------Original Message------))
не возвращать эту часть, просто чтобы убедиться, что она есть