Необходимо извлечь Reply-To в заголовок - PullRequest
1 голос
/ 27 сентября 2019

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

Ответ в заголовке электронного письма в точности похож на эту форму

Reply-To: John Doe <JohnDoe123@gmail.com>

Пока что это то, что я мог придумать

.Pattern = "Reply-To:^<([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$>"

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

1 Ответ

0 голосов
/ 27 сентября 2019

Обратите внимание, что ^ соответствует началу строки (или строки, в зависимости от значения RegExp.Multiline), а $ соответствует концу строки (или строки).Таким образом, ваше регулярное выражение не будет работать.

Чтобы получить письмо из <...> скобок после Reply-To: подстроки, вы можете использовать

Reply-To:[^<>]*<([^<>@\s]+@[^<>\s]+)>

См. regex demo

Подробности

  • Reply-To: - буквенная строка
  • [^<>]* - 0+ символов кроме > и <
  • < - < char
  • ([^<>@\s]+@[^<>\s]+) - Группа захвата 1 (доступ к этому значению с помощью match.Submatches(0)): один или несколько символов кроме<, >, @ и пробел, после которых следует @, а затем один или несколько символов, отличных от <, >, и пробел
  • > - a > char.

Код VBA:

Sub DemoFn()
   Dim re, targetString, colMatch, objMatch
   Set re = New regexp
   With re
     .pattern = "Reply-To:[^<>]*<([^<>@\s]+@[^<>\s]+)>"
     .Global = True
   End With

   targetString = "Reply-To: John Doe <JohnDoe123@gmail.com>"
   Set colMatch = re.Execute(targetString)
   If colMatch.Count > 0 Then
     Debug.Print colMatch(0).SubMatches(0)
   End If
End Sub

Выход:

enter image description here

...