2017-02-04 5 views
2

У меня есть несколько писемИсключить строку, используя регулярное выражение?

[email protected] 
[email protected] 
[email protected] 

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

'/(?!spb)[a-zA-Z0-9-_\.][email protected][a-z0-9\.]+$' 

Но она возвращает []. Что я делаю не так?

+3

Покажите нам код, который вы пытаетесь использовать. Из чего вы хотите их исключить? Список, дикт, набор? –

+0

@AustinHastings Я указываю эти данные в своем вопросе. Я попытался проверить это в примере с помощью электронной почты. И для этого я использую 'emails = re.findall (pattern, test)' –

+0

https://regex101.com/r/505NB9/3 – JazZ

ответ

0

https://regex101.com/r/505NB9/1 Похоже, что первые два символа не нужны.

+0

Я думаю, нет. потому что это светлая строка, что не соответствует шаблону –

+0

Да, извините, я не понял вопроса. Вы могли бы избежать регулярного выражения: 'if 'info' в email.split ('@') [0] или 'sales' в email.split ('@') [0]:' – Kroustou

0

См. Мой рабочий пример ниже.

  • Чтобы ваш код работал правильно, вам необходимо будет указать ^, чтобы указать начало линии.
  • Причина, по которой вы получили [], вероятно, потому, что вы не использовали параметр re.MULTILINE. Флаг re.MULTILINE сообщает python, чтобы специальные символы «^» и «$» соответствовали началу или концу любой строки внутри строки, в отличие от начала или конца всей строки.

Visual representation of the required regular expression

import re 

test = '[email protected]\[email protected]\[email protected]' 
print(test) 

[email protected] 
[email protected] 
[email protected] 

pattern = re.compile('^(?!info|sales)[[a-zA-Z0-9-_.][email protected][a-z0-9.]+$', re.MULTILINE) 
emails = re.findall(pattern, test) 
print(emails) 

['[email protected]'] 
0

Возможно, более понятным и ремонтопригодны:

import re 

string = """ 
[email protected] 
[email protected] 
[email protected] 

some other text here with emails [email protected] included""" 

rx = re.compile(r'\[email protected]\S+') 

def ignore(value): 
    lst = ['info', 'sales'] 
    for i in lst: 
    if i in value: 
     return False 
    return True 

emails = filter(ignore, rx.findall(string)) 
print(emails) 
# ['[email protected]', '[email protected]'] 

Просто настройте lst из ignore() по мере необходимости.

Смежные вопросы