Я пытаюсь вернуть только первое совпадение из приведенной ниже переменной
MACHINE: p1prog06<br>
MACHINE: p1prog06
используя следующее выражение:
res = list(set([re.sub(r'=(?:\^M)?|[\r\n]+', '', m.group(1)) for m in re.finditer(r'\bMACHINE:\s*(.*(?:(?:\r\n?|\n)\S+)?)', email_body, re.M)]))
Согласно документации,
`list(set(res))`
должен возвращать уникальные значения, но я получаю
u'p1prog06', u'p1prog06<br><br>']
Код:
conn = imaplib.IMAP4_SSL("outlook.office365.com")
conn.login(user,pwd)
conn.select("test")
resp, items = conn.uid("search" ,None, '(OR (FROM "email@pexample.com) (FROM "email2@pexample.com"))')
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)
#get all emails with words "PA1" or "PA2" in subject
if mail["Subject"].find("PA1") > 0 or mail["Subject"].find("PA2") > 0:
#search email body for job name (string after word "JOB")
regex1 = r'(?<!^)JOB:\s*(\S+)'
#regex2 = r'\bMACHINE:\s*(.*(?:\s*^\d+)?)'
#c=re.searchall(regex2, email_body, re.M)#,re.DOTALL)
a=re.findall(regex1 ,email_body)
#res = [re.sub(r'=(?:\^M)?|[\r\n]+', '', m.group(1)) for m in re.finditer(r'\bMACHINE:\s*(.*(?:(?:\r\n?|\n)\S+)?)', email_body, re.M)]
res = list(set([re.sub(r'=(?:\^M\<br><br>)?|[\r\n]+', '', m.group(1)) for m in re.finditer(r'\bMACHINE:\s*(.*(?:(?:\r\n?|\n)\S+)?)', email_body, re.M)]))