Как вы используете регулярное выражение, чтобы удалить потенциально повторяющиеся шаблоны из конца строки? - PullRequest
0 голосов
/ 26 апреля 2019

Используя API Google для получения электронных писем из папки «Входящие», тело каждого электронного письма включает в конце раздел, который действует как цитата того, на что отвечает электронное письмо. Этот шаблон может повторяться бесконечно в зависимости от длины цепочки писем.

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

Пример шаблона:

СООТВЕТСТВУЮЩЕЕ СООБЩЕНИЕ Четверг, 25 апреля 2019 г., 10:34. Некоторое имя писал: ЗАЯВЛЕННОЕ СООБЩЕНИЕ Четверг, 25 апреля 2019 г. 10:33 писал: ПРЕДЫДУЩАЯ ЦИТАТА СООБЩЕНИЯ

Я хотел бы извлечь только СООТВЕТСТВУЮЩЕЕ СООБЩЕНИЕ

Я пробовал подобный шаблон, но он жадно захватит первое цитируемое сообщение в result.group (1)

result = re.search('(.*) On (.*), (.*),(.*) at (.*)', m['snippet'])

сеть меня:

result.group(1): RELEVANT MESSAGE On Thu, Apr 25, 2019 at 10:34 AM Some Name <some@email.com> wrote: QUOTED MESSAGE
result.group(2): On Thu, Apr 25, 2019 at 10:33 AM <some_other@email.com> wrote: PREVIOUS QUOTED MESSAGE

То, на что я надеюсь, это:

result.group(1): RELEVANT MESSAGE
result.group(2): On Thu, Apr 25, 2019 at 10:34 AM Some Name <some@email.com> wrote: QUOTED MESSAGE On Thu, Apr 25, 2019 at 10:33 AM <some_other@email.com> wrote: PREVIOUS QUOTED MESSAGE

или

result.group(1): RELEVANT MESSAGE
result.group(2): On Thu, Apr 25, 2019 at 10:34 AM Some Name <some@email.com> wrote: QUOTED MESSAGE
result.group(3): On Thu, Apr 25, 2019 at 10:33 AM <some_other@email.com> wrote: PREVIOUS QUOTED MESSAGE

1 Ответ

1 голос
/ 26 апреля 2019

Это извлечет только СООТВЕТСТВУЮЩЕЕ СООБЩЕНИЕ

test="RELEVANT MESSAGE On Thu, Apr 25, 2019 at 10:34 AM Some Name <some@email.com> wrote: \
QUOTED MESSAGE On Thu, Apr 25, 2019 at 10:33 AM <some_other@email.com> wrote: \
PREVIOUS QUOTED MESSAGE"

result = re.search('(.*?)(?=On[^,]+,[^,]+,[ 0-9]+at)', test)

result.group(0): 'RELEVANT MESSAGE '

Я думаю, что стоит немного сформулировать шаблон регулярных выражений (в очень разговорном выражении):

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

(? = ...): означает «соответствует тому, что осталось до ..., но не ...

[^,] +: все символы, кроме , (запятая), которые мы хотим сохранить в качестве разделителя в [^,]+,[^,]+,[ 0-9]+

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