Получить подстроку из списка - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь найти в теле письма определенные строки.Я был в состоянии получить извлечение всего тела письма.Теперь я хочу извлечь из него конкретные строки.Пока мой код:

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:

           regex = r"(\bEvent demon log entry:)(?:\r?\n|\r)+(\[[^]]+\].*)"
           a=re.findall(regex, email_body , re.IGNORECASE)

Сейчас я получаю следующие строки:

[(u'Event demon log entry:', u'[27/12/2018 05:29:30]      CAUAJM_I_40245 EVENT: ALARM            ALARM: JO=\r')]
[(u'Event demon log entry:', u'[27/12/2018 04:58:05] CAUAJM_I_40245 EVENT: ALARM ALARM: JOBFAILURE JOB: p2=\r')]
[(u'Event demon log entry:', u'[27/12/2018 06:00:03]      CAUAJM_I_40245 EVENT: ALARM            ALARM: JO=\r')]
[(u'Event demon log entry:', u'[27/12/2018 07:00:05]      CAUAJM_I_40245 EVENT: ALARM            ALARM: JO=\r')]

, но хочу получить все от [(u'Event demon log entry:', u'[27/12/2018 05:29:30] до EVENT: ALARM ALARM: JO=\r')]

Желаемый результат:

CAUAJM_I_40245 EVENT

Оригинальный код из тела письма:

Event demon log entry:

[27/12/2018 04:48:17]      CAUAJM_I_40245 EVENT: ALARM            ALARM: JOBFAILURE       JOB: bx_p2_reporting EXITCODE:  1

ОБНОВЛЕНИЕ:

Оказалось, мне нужно получить следующее:

JOB: bx_p2_reporting EXITCODE:  1

с

Event demon log entry:

[26/12/2018 20:17:14] CAUAJM_I_40245 EVENT: ALARM ALARM: JOBFAILURE JOB: p2=
_batch_excel_RevalFutBasisSpdCalc_NY3pm MACHINE: ldnmdsbatchxl01 EXITCODE: =
268438455

1 Ответ

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

Вы можете использовать

r'Event demon log entry:[\r\n]*\[[^]]+]\s*(.*?)\s*EVENT: ALARM'

См. Демо regex

Если вы используете его с re.findall, вы должны получить только CAUAJM_I_40245.

Подробности

  • Event demon log entry: - буквенная подстрока
  • [\r\n]* - 0+ символов CR или LF
  • \[ - [ символ
  • [^]]+ - 1 или более символов, отличных от ]
  • ] - ] символ
  • \s* - 0+ пробельных символов
  • (.*?) - Группа 1: любые ноль или более символов, кроме символов разрыва строки, как можно меньше
  • \s* - 0+ пробельных символов
  • EVENT: ALARM - буквальная подстрока.

Python demo :

import re
rx = r"Event demon log entry:[\r\n]*\[[^]]+]\s*(.*?)\s*EVENT: ALARM"
s = "Event demon log entry:\n\n[27/12/2018 04:48:17]      CAUAJM_I_40245 EVENT: ALARM            ALARM: JOBFAILURE       JOB: bx_p2_reporting EXITCODE:  1"
print(re.findall(rx, s, re.IGNORECASE))
# => ['CAUAJM_I_40245']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...