Анализируйте содержимое электронной почты с помощью регулярных выражений

Каждый день я получаю тысячи писем, и я хочу проанализировать содержимое / тело этих писем, чтобы загрузить их в базу данных.

Моя проблема в том, что сейчас я разбираю тело письма вручную и хочу изменить логику на Регулярное выражение в C#..

Вот тело писем:


Gentilissima Agenzia Nexity Residenziale

il nostro utente:

Sig./Sig.ra: Пабло Азорин

Электронная почта: [email protected]

Тел .: 02322-498900

sta cercando un immobile con le seguenti caratteristiche:

Категория: Residenziale

Типология: Вилла

Контрастный тип: Вендита

Коммуна: Ассаго, пров. Милан

Зона: неспецифические данные

Фасция prezzo: неспецифические данные


Мне нужно выделить текст полужирным шрифтом, и я подумал, что для этого мне нужно RegEx ...

С нетерпением жду вашего предложения о том, как заставить его работать.

Спасибо!

- Пабло

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
3 043
7

Ответы 7

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

Спасибо за быстрый комментарий! Вскоре я ознакомлюсь с этой книгой, но пока мне нужно, чтобы это было сделано как можно скорее. Не могли бы вы посоветовать мне, как это реализовать? Ура, - Пабло

pabloazorin 13.12.2008 22:35

Если электронные письма всегда имеют один и тот же формат, вы можете сделать это разными способами. Простой способ сделать это - разделить на новую строку и взять подстроку в каждой строке, начиная с метки.

С помощью регулярных выражений вы, вероятно, создадите регулярное выражение, которое создает несколько именованных захватов. Затем вы можете проиндексировать в свойстве Groups совпадения по имени каждой именованной группы, чтобы получить из нее значение. Конечно, это немного сложнее.

Способ substring / IndexOf () также будет быстрее, чем создание сложного регулярного выражения.

Tomalak 14.12.2008 13:34

Мы обнаружили, что для фильтрации спама и других приложений большого объема регулярные выражения немного медленны для анализа заголовков MIME, что вы и хотите сделать. Код несколько специализирован, но я написал Конечный автомат C для выполнения синтаксического анализа, который работает так же быстро, как и вы, не прибегая к чему-то вроде re2c. Код не для слабонервных, но он невероятно быстр.

Я думаю, что для электронной почты вы обнаружите, что с явным конечным автоматом легче работать, чем с регулярными выражениями. Это также последнее прибежище оператора goto!

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

Sig\./Sig\.ra :(.*)

Email: (.*)

Tel\.: (.*)

sta cercando un immobile con le seguenti caratteristiche:

Categoria: (.*)

Tipologia: (.*)

Tipo di contratto: (.*)

Comune: (.*)

Zona: (.*)

Fascia di prezzo: (.*)

В C#

Regex regexObj = new Regex(@"Sig\./Sig\.ra :(.*)

Email: (.*)

Tel\.: (.*)

sta cercando un immobile con le seguenti caratteristiche:

Categoria: (.*)

Tipologia: (.*)

Tipo di contratto: (.*)

Comune: (.*)

Zona: (.*)

Fascia di prezzo: (.*)");
Match matchObj = regexObj.Match(subjectString);
string Sig = matchObj.Groups[1].Value;
string Email = matchObj.Groups[2].Value;
// and so on to get all the other parts

Вы действительно не хотите делать это вручную или с помощью регулярных выражений. Существует много разных способов кодирования данных в электронном письме, и множество электронных писем, которые не строго соответствуют спецификации, все еще могут быть проанализированы. Я добился успеха с АнПОП в среде .NET.

я думаю, будет лучше разбить эту строку на массив строк вы можете инициализировать словарь со всеми заголовками в качестве ключей и вы будете искать в каждой строке заголовок из словаря (например, «Электронная почта:»), а затем снова поместите результат в словарь как значение в конце у вас будет словарь со всеми названиями и значениями. Я думаю, вам не нужно для этого регулярное выражение. на самом деле в этом случае порядок названий не имеет значения.

Для загрузки электронной почты я использовал объекты Mailbee .Net. Эта библиотека довольно проста в использовании и хорошо документирована. Но если вы хотите избежать программирования, вы также можете использовать парсер электронной почты, например EmailParser2Database.

Другие вопросы по теме