Исключить конкретный адрес электронной почты с регулярным выражением - PullRequest
0 голосов
/ 14 марта 2012

У меня есть это регулярное выражение для извлечения писем, которое отлично работает:

([a-zA-Z][\w\.-]*[a-zA-Z0-9])@([a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z])

однако есть некоторые электронные письма, которые я не хочу включать как:

server@example.com
noreply@example.com
name@example.com

Я пытался добавить что-то вроде ^ (?! server | noreplay | name), но ничего не получилось.

Также использование скобок, как указано выше, повлияет на кортежи с (имя, домен)?

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Просто проверьте эти адреса электронной почты после их извлечения ...

bad_addresses=['server@example.com', 'noreply@example.com', 'name@example.com']
emails=re.findall('[a-zA-Z][\w\.-]*[a-zA-Z0-9])@([a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]', contentwithemails)

for item in emails[:]:
  if item in bad_addresses:
    emails.remove(item)

Вы должны сделать кусок электронной почты (emails[:]), потому что вы не можете сделать цикл for всписок, который постоянно меняет размер.Это создает «призрачный» список, который можно прочитать, пока действует реальный список.

0 голосов
/ 14 марта 2012

Проверьте результаты своего регулярного выражения на наличие писем, которые соответствуют списку неверных писем.

results = list_from_your_regex
invalids = ['info', 'server', 'noreply', ...]
valid_emails = [good for good in results if good.split('@')[0] not in invalids]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...