Найти несколько совпадений регулярных выражений в определенном разделе - PullRequest
0 голосов
/ 23 апреля 2020

Я уже искал это и нашел несколько сообщений, но ни одна из них фактически не решила мою проблему.

У меня есть тело письма. Что выглядит примерно так:

From: sender@example.com
Sent Date: Monday, 31.12.99 8:30:12
To: Name of Recp1 <recipient1@example.com>, Name of Recp2 <recipient2@example.com>, Name of Recp3 <recipient3@example.com>

text ...

Нет Я хочу иметь выражение регулярного выражения, которое извлекает только всех получателей ...

Но когда Я делаю что-то вроде:

<(\w+(?:\.?\w+)@\w+\.\w{2,3})>

Я нахожу все адреса электронной почты, включая адрес отправителя.

Но когда я делаю что-то вроде:

To:.*<(\w+(?:\.?\w+)@\w+\.\w{2,3})>

, я нахожу только последний получатель.

Как я могу сказать, найти все адреса электронной почты, начинающиеся с To:

Я также попробовал это с начальным ancor ^, но тогда он ничего не соответствует

^To:.*<(\w+(?:\.?\w+)@\w+\.\w{2,3})>

Есть идеи?

Спасибо

1 Ответ

1 голос
/ 23 апреля 2020

Что вы можете сделать, это сначала найти всю строку, которая начинается с To:, а затем использовать шаблон для получения адресов электронной почты.

import re

regex = r"^To: .*"

test_str = ("From: sender@example.com\n"
            "Sent Date: Monday, 31.12.99 8:30:12\n"
            "To: Name of Recp1 <recipient1@example.com>, Name of Recp2 <recipient2@example.com>, Name of Recp3 <recipient3@example.com>")

for m in re.findall(regex, test_str, re.MULTILINE):
    print(re.findall(r"\w+\.?\w+@\w+\.\w{2,3}", m))

Вывод

['recipient1@example.com', 'recipient2@example.com', 'recipient3@example.com']

Если вы можете использовать модуль регулярных выражений PyPi , вы можете использовать просмотр

(?<=^To:.*)\w+\.?\w+@\w+\.\w{2,3}

Regex demo | Python демо

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