Поиск в теле письма строки и возвращаемых значений после строки, возвращаемой после шаблона - PullRequest
0 голосов
/ 27 декабря 2018

Я новичок в Python и прошу прощения, если это тривиально для вас. Некоторые письма содержат следующую строку в теле письма:

Event demon log entry:

[27/12/2018 08:15:02] CAUAJM_I_40245 EVENT: ALARM ALARM: MAXRUNALARM JOB: p1_credit_qv_curve_snap MACHINE: p1prog06

С этим кодом

#!/usr/bin/python

import email, imaplib, re
user = 'user@example.com'
pwd = 'pass'

conn = imaplib.IMAP4_SSL("outlook.office365.com")
conn.login(user,pwd)
conn.select("Inbox")

resp, items = conn.uid("search",None, 'All')
items = items[0].split()
for emailid in items:
    resp, data = conn.uid("fetch",emailid, "(RFC822)")
    if resp == 'OK':
        email_body = data[0][1].decode('utf-8')
        mail = email.message_from_string(email_body)
        if mail["Subject"].find("PA1") > 0 or mail["Subject"].find("PA2") > 0:
          match=re.findall(r'Event demon log entry.*\n.*\n.*', email_body , re.IGNORECASE)
           print match

iполучаю:

[u'Event demon log entry:\r\n\r\n[27/12/2018 08:15:02] CAUAJM_I_40245 EVENT: ALARM ALARM: MAXRUNALARM JOB: p=\r', u'Event demon log entry:<br><br=\r\n>[27/12/2018 08:15:02]      CAUAJM_I_40245 EVENT: ALARM            ALARM: M=\r\nAXRUNALARM      JOB: p1_credit_qv_curve_snap MACHINE: p1prog06<br><br>Attac=\r']

Как избавиться от этих выводов HTML?

мне нужен следующий вывод (если это возможно в одной строке):

Event demon log entry:[27/12/2018 08:15:02] CAUAJM_I_40245 EVENT: ALARM ALARM: MAXRUNALARM JOB: p1_credit_qv_curve_snap MACHINE: p1prog06

1 Ответ

0 голосов
/ 27 декабря 2018

Вы можете использовать 2 группы захвата:

(\bEvent demon log entry:)(?:\r?\n|\r)+(\[[^]]+\].*)

См. Демонстрационную версию regex | Python demo

Что будет соответствовать:

  • (\bEvent demon log entry:) Захват в первой группе
  • (?:\r?\n|\r)+ Матч 1+ раз новыйстрока (или используйте {2} вместо + для точного совпадения 2 раза)
  • (\[[^]]+\].*) Совпадение [, а не ] с использованием отрицательного класса символов с последующим сопоставлением закрывающего ].Затем сопоставьте 0+ раз любому символу, кроме новой строки

Например, используя findall :

import re
regex = r"(\bEvent demon log entry:)(?:\r?\n|\r)+(\[[^]]+\].*)"
email_body = ("Event demon log entry:\n\n"
            "[27/12/2018 08:15:02] CAUAJM_I_40245 EVENT: ALARM ALARM: MAXRUNALARM JOB: p1_credit_qv_curve_snap MACHINE: p1prog06")

for (g1, g2) in re.findall(regex, email_body , re.IGNORECASE):
    print(g1 + g2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...