String and Regexp - Exercises. Задача 10. Extract emails
Здравейте! Това е патерна, който съм измислила и хваща всички мейли, които трябва от примерите. Съответно задачата изкарва 75/100 в джъдж.А именно:
string pattern =@"\b[a-z](?:_?[a-z0-9\-\.]+@[a-z\-]+\.[a-z]+([\.a-z]+)?)\b";
Examples of valid emails: info@softuni-bulgaria.org, kiki@hotmail.co.uk, no-reply@github.com, s.peterson@mail.uu.net, info-bg@software-university.software.academy.
Examples of invalid emails: --123@gmail.com, …@mail.bg, .info@info.info, _steve@yahoo.cn, mike@helloworld, mike@.unknown.soft., s.johnson@invalid-.
Проблемът е, че не разпознава точката пред .info@info.info за забранен символ, а за граница на дума и ми взима като мач всичко след нея, т.е. info@info.info
Та въпросът ми е как да включа точката в забранените символи? Моля за идеи?
Edit: Oказа се, че имало такова нещо като "lookaround", което върши тази работа...Source
Последно го направих с този, понеже с интервал преди \b ми мачва по един интервал пред валидните мейли, а и бях пропуснала, че и след @ може да има число
string pattern =@"\b(?<!\S)(([a-z0-9\-\.]+@[a-z0-9\-]+\.[a-z0-9]+([\.a-z0-9]+)?))\b";
(?<!\S) - това има за цел да провери дали предишния символ преди началото на думата e нещо различно от интервал и само ако не е да мачне израза във вторите скоби
lookaround-a е интересно решение, ще го запомня
Предложения от мен фикс работи с интервала и скобите между израза ти.
Трябва да се вземе обаче 1 група. Затова ти казах дай си кода за да го напаснем към него.
https://dotnetfiddle.net/d9vAGF
Ето, обаче го редактирах с новия вече, след като с него си изкара 100/100