Невозможно объединить два шаблона для конкретной цели c - PullRequest
0 голосов
/ 20 января 2020

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

Я пробовал как:

import re

emaillist = ['alex@10mates.com.au','sales@1300easyisp.com.au','jquery@3.4.1','info@ace.com.au','helpdesk@airtel.net.au','info@aussieit.net.au','logo@3x.c185d295.png','nr@seenError']

# pattern = r'[\w\.-]+@[\w\.-]+(?:jpe?g|png|gif|bmp)'
pattern = r'[\w\.-]+@[\w\.-]+(?:com|net).+'

def filter_emails(email):
    email = re.findall(pattern,email)
    if email:
        return email[0]
    else:
        return "criterion not met"

if __name__ == '__main__':
    for email in emaillist:
        print(filter_emails(email))

Мало строк содержит png, jpg и др. c. который более или менее похож на письмо, от которого я хочу избавиться. Мой закомментированный шаблон может сделать обратное, то есть он захватывает те строки, которые имеют вышеуказанный суффикс. Тем не менее, шаблон, который я использовал для выделения нужных писем, делает свое дело, но они не всегда могут содержать com или net.

Вопрос: Как я могу объединить два шаблона таким образом, чтобы он расставил приоритеты (не подчеркивая, так как два суффикса могут не всегда быть там), те строки, которые содержат com или net, но игнорируют их, которые содержат png, jpg et c.?

1 Ответ

1 голос
/ 20 января 2020

Вы можете использовать отрицательный прогноз (?!, чтобы проверить, не является ли то, что после последней точки, ни одним из расширений:

^[^\s@]+@[^\s@]+\.(?!jpe?g|png|gif|bmp)[^\s.]+$

Regex demo

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