Nano Hash - криптовалюты, майнинг, программирование

Шаблон регулярного выражения для анализа разделов Mime в С#/winrt

Схожу с ума, пытаясь сделать эту работу этим утром.

Я использую граничную строку электронного письма, чтобы попытаться разделить ее на части text/plain и text/html. Я знаю, что для этого есть библиотеки, но ни одна из них не работает в WinRT.

Вот что у меня есть. Я сосу регулярное выражение, так что, вероятно, все неправильно:

Пример данных

From: Rory <[email protected]>
Date: Mon, 8 Oct 2012 17:05:48 +0100
Message-ID: <[email protected]>
Subject: Subject of my email
To: [email protected]

Content-Type: multipart/alternative; boundary=bcaec54fbd3a824f3504cb8e677d

--bcaec54fbd3a824f3504cb8e677d

Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

text part of email

--bcaec54fbd3a824f3504cb8e677d
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<html>
    <strong>HTML part of email</strong>
</html>

--bcaec54fbd3a824f3504cb8e677d--

я пытаюсь извлечь

  1. оба участка между пограничным маркером --bcaec54fbd3a824f3504cb8e677d
  2. Content-Type, charset и Content-Transfer-Encoding каждого из этих разделов.
  3. Сам контент (ниже Content-Transfer-Encoding, до следующей границы

Код регулярного выражения

string b = "bcaec54fbd3a824f3504cb8e677d";
Regex r = new Regex(
"(--" + b + "\r?\nContent-Type: (text/plain|text/html); charset=(.+?)\r?\nContent-Transfer-Encoding: (.+?)\r?\n(.*?--" + b + "))", 
RegexOptions.Singleline); 

Это соответствует обеим частям, только если я пропущу граничную строку в конце. Если я включу его, он будет соответствовать только первой части. Может кто-нибудь, пожалуйста, помогите мне, прежде чем я начну крушить вещи

ОБНОВЛЕНИЕ: добавлены образцы данных, сокращены


  • обновил образцы данных, постарался сделать немного понятнее 22.10.2012

Ответы:


1

Использовать шаблон регулярного выражения

"(--" + b + "(?:\r?\n)+Content-Type:\s+([^;]+);\s+charset=([^\s\n\r]+)(?:\r?\n)+Content-Transfer-Encoding:\s([^\s\n\r]+)(?:\r?\n){2,}.*?)(?=\r?\n--" + b + "(?:--)?\r?\n)"

с RegexOptions.Singleline опцией/флагом.

22.10.2012

2

Попробуйте это регулярное выражение с опцией SingleLine:

--bcaec54fbd3a824f3504cb8e677d\r?\n\s*(Content-Type:\s*([^;]+);\s*charset=(\S+)\r?\n+Content-Transfer-Encoding:\s*(\S+)\r?\n\s*(.*?))\s*(?=--bcaec54fbd3a824f3504cb8e677d)

Протестируйте его здесь, на странице RegexHero.

22.10.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..