Как сопоставить и занести в черный список адрес GMail по regexp - PullRequest
1 голос
/ 21 мая 2019

Я бы хотел сопоставить и заблокировать адрес как foo.bar@gmail.com.Но это не так просто, так как любое из следующего:

foobar@gmail.com
fo.o....b..a..r@gmail.com
foo.bar+goo@gmail.com
fo.ob.ar+something@gmail.com

Псевдоним для той же учетной записи электронной почты.Можно ли создать регулярное выражение, которое соответствует всем возможным псевдонимам?Или я должен нормализовать (удалить точки и текст после +) всех адресов Gmail перед применением фильтров / черного списка?

Я мог бы пойти с: f[.]*o[.]*o[.]*b[.]*a[.]*r[.]*(+.*), но это выглядит нелепо для длинных писем и, вероятно, имеет плохиепроизводительность

1 Ответ

2 голосов
/ 21 мая 2019

Одной из возможностей может быть регулярное выражение, такое как

f\.*o\.*o\.*b\.*a\.*r(?=.*\@gmail\.com) 

Этот шаблон в основном говорит, что после любой буквы foobar может быть некоторое неизвестное количество точек .. С этого момента вы всегда можете работать и расширять выражение до чего-то подобного

f[\.-_]*o[\.-_]*o[\.-_]*b[\.-_]*a[\.-_]*r(?=.*\@gmail\.com)

Здесь мы также принимаем неизвестные числа дефисов и подчеркиваний.

Пример

Вот пример на python:

# import regex

string = 'fo.o....b..a..r@gmail.com'
pattern = r'f\.*o\.*o\.*b\.*a\.*r(?=.*\@gmail\.com)'
test = regex.search(pattern, strings[0])
print(test.group(0))
# foobar
...