Убрать из строки лишнее и оставить только email'ы
Есть строка с сотрудниками, пример:
Сидоров Дмитрий Павлович [email protected]; Иванов Иван Иванович [email protected]; Петрова Луися Вазегновна {УВОЛЕН} [email protected];
Нужно очистить ее от лишнего и оставить только email'ы сотрудников без метки УВОЛЕН, результат должен быть такого вида:
Подскажите пожалуйста как осуществить в дзене python, ибо мне на ум приходят только костыли аля:
str1 = 'Сидоров Дмитрий Павлович <[email protected]>; Иванов Иван Иванович <[email protected]>; Петрова Луися Вазегновна {УВОЛЕН} <[email protected]>;'
find_emails = str1.split(';')
for item in find_emails:
if 'УВОЛЕН' not in item:
print(item)
но тут будет все остальное и кроме самих email'ов
Ответы (2 шт):
Автор решения: D.Vinogradov
→ Ссылка
Если у Вас действительно все, как в примере, то возможен такой вариант:
from itertools import chain
import re
str_of = 'Сидоров Дмитрий Павлович [email protected]; Иванов Иван Иванович [email protected]; Петрова Луися Вазегновна {УВОЛЕН} [email protected];'
print(list(chain.from_iterable([re.findall('([A-Za-z].*)', i) for i in str_of.split(';') if 'УВОЛЕН' not in i])))
>>>['[email protected]', '[email protected]']
либо такой вариант (более универсальный):
print(list(chain.from_iterable([re.findall('[\w.+-]+@[\w-]+\.[\w.-]+', i) for i in str_of.split(';') if 'УВОЛЕН' not in i])))
>>> ['[email protected]', '[email protected]']
Автор решения: SergFSM
→ Ссылка
для приведенного примера работает еще такая регулярка:
from re import findall
str1 = 'Сидоров Дмитрий Павлович <[email protected]>; Иванов Иван Иванович <[email protected]>; Петрова Луися Вазегновна {УВОЛЕН} <[email protected]>;'
findall(r'(?<!{УВОЛЕН} )<(.*?)>', str1) # ['[email protected]', '[email protected]']