Регулярка для парсинга Email'ов

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
Нет ничего более худого чем скрапить эмейлы... Обрыскав форум в поисках - единственная регулярка, которая мне хоть как-то помогла была следующая:
C#:
string regex = @"[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?[\.\-A-Za-z0-9]{2,}";
Возникли следующие проблемы: она cпарсила другие результаты, которые не удовлетворяют:

[email protected]
9@5xe
[email protected]
org.mozilla.javascript.gen.c10@3e0913fc
[email protected]
ania@polish (вместо [email protected])
cached@1574596174 --
[email protected]
Из тупого:
а) как исключить результаты с окончанием .gif/.svg/.jpg
б) как заставить неполные результаты добиваться полных (на примере с anya и другими участниками торжества)

Из серьезного:
Иногда в эмейлах присутствуют знаки: "_" , "-", а так же просто пробел. Если включить пробел в регулярку - начинает парситься всё, что идет после него до конца строки ( иногда тысячи символов).

Спасибо большое за внимание.

P.S. Ещё я прикинул - может написать регулярку, где строка после Знака @ должна заканчиваться на доменные имена? может быть она более избирательна будет?)
 
Последнее редактирование:

Max

Client
Регистрация
17.06.2012
Сообщения
168
Благодарностей
44
Баллы
28
У тебя регулярка в корне неправильная... х3 на каком ты ее форуме взял... Знаки вопроса не нужны. Точка должна быть вне групп символов - так как по большей части встречается очень часто в названии домена. Гугли "email RFC" стандарт и regex.
Плюс даже если ты будешь использовать регексы по стандартам все равно будет попадаться хлам... Мейлы нужно валидировать, для более-менее хорошего результата. Те смотреть что возвращают домены на которых находится ящик.
 
  • Спасибо
Реакции: TwistDanceR

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
У тебя регулярка в корне неправильная... х3 на каком ты ее форуме взял... Знаки вопроса не нужны. Точка должна быть вне групп символов - так как по большей части встречается очень часто в названии домена. Гугли "email RFC" стандарт и regex.
Плюс даже если ты будешь использовать регексы по стандартам все равно будет попадаться хлам... Мейлы нужно валидировать, для более-менее хорошего результата. Те смотреть что возвращают домены на которых находится ящик.
Про валидность - понятно, будет проверка, разговор о первичном парсинге, потому что собрать нужно не много не мало - дофига. За подсказки спасибо.
А взял - из темы "золотая коллекция регулярок".
 

vitashok

Client
Регистрация
20.11.2015
Сообщения
84
Благодарностей
13
Баллы
8
собрать нужно не много не мало - дофига.
А много надо? Просто я тут парсинг запустил одного сайта, то уже больше 2 лямов мейлов насобиралось, а куда их притулить то, х.з. пока
 

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
А много надо? Просто я тут парсинг запустил одного сайта, то уже больше 2 лямов мейлов насобиралось, а куда их притулить то, х.з. пока
У меня сайт не один, сайтов порядка миллиона, а почта нужна будет только одна.
 

timoxa949

Client
Регистрация
16.11.2018
Сообщения
158
Благодарностей
27
Баллы
28
Если кому надо будет, работает четко:

C#:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
 

yoptoo

Client
Регистрация
14.11.2016
Сообщения
158
Благодарностей
36
Баллы
28
Если кому надо будет, работает четко:

C#:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
Спасибо тебе огромное! Мужик, ты просто чертов гений:ay:
 
  • Спасибо
Реакции: пfggggggghj и Ondasai

Ondasai

Новичок
Регистрация
11.07.2021
Сообщения
3
Благодарностей
0
Баллы
1
Если кому надо будет, работает четко:

C#:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
Я без понятия, откуда такие знания у вас :-)
 

sistemanipel

Client
Регистрация
28.08.2013
Сообщения
29
Благодарностей
1
Баллы
3
Если кому надо будет, работает четко:

C#:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
эта регулярка нагребла такое:

всего 2 валидных емейла (дубль). Как подправить то?
 
Последнее редактирование:
  • Спасибо
Реакции: Nick

traffman

Client
Регистрация
30.11.2018
Сообщения
90
Благодарностей
99
Баллы
18
Ещё выпаршивает вот такие емаилы
//ui-avatars.com/api/?name=[email protected]

Попробуйте вот эту
[a-z0-9](?:[a-z0-9\-\._+]*[a-z0-9_])@[\w\._-]+\.[\w]{2,6}
 
Последнее редактирование:
  • Спасибо
Реакции: sistemanipel

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)