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
1.Ако замениш ^ и $ с \b и \b поне ще ти хваща мейли, които не са сами на ред, а са част от изречение. Тогава идва проблемът, че ще ти хване от примерите за невалидни --123@gmail.com, и .info@info.info заради това, че никъде не изключваш стринга да започва с . и -- . По принцип се оправя с един интервал преди първото \b (както предложи колегата Пламен), но не знам дали няма да ти направи проблем, защото ще ти мачне по един интервал преди всеки мейл, където има такъв.
Е да, но аз му ги подавам като стрингове един по един да ги валидира. и тези оп примерите работят.
Така ми е по-лесно и искам да го направя така, но не знам какво изпускам.
Т.е. кодът ми екстрактва мейлите, но явно в джъдж подават нещо, което е различно от примерите и което моят патърн не хваща.
От примерните инпути няма да ти изкара никакъв резултат, тъй като не ти подават мейл един по един, а ги включват в изречение. ^ $ означават съотв. начало и край на стринг, т.е. поз. 0 и поз. string.Length-1
Това показва ли ти го? Please contact us at: support@github.com.
А видях, че си писала във фейса, че 1 тест не ти минава. Предпоследния ли е?
Е, виж ми програмта. Аз ги чета в масив от стрингове. Пробвай я във вижуал студито. Работи.
Тъй като не си писала кой тест в джъджа не ти минава - на мен предпоследния тест не ми минаваше и като добавих проверка за предишен символ дали е начало на стринг или \s се оправи, т.е. ако е той - явно подават невалиден мейл, който започва с нещо различно от буква
Последният не ми минава.
Добавих доста неща, които бях изпуснала, но все още не минава....
http://pastebin.com/J7vwHrrQ
Явно е от сплитването та текста.