Loading...
Maria_ls avatar Maria_ls 383 Точки

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
Programming Fundamentals 19/10/2016 09:40:43
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

А на моя регекс какъв му е проблема тук?

            string[] text = Console.ReadLine().TrimEnd('.')
                .Split(new char[] {' '}
                , StringSplitOptions.RemoveEmptyEntries).ToArray();
            string pattern 
                = @"^([a-zA-Z0-9]+[.]*)([a-zA-Z0-9]*[-]*[a-zA-Z0-9]*)[@][a-zA-Z0-9]+[-]*[a-zA-Z0-9]*[.][a-zA-Z0-9]+([.]*[a-zA-Z0-9])*$";
            Regex regex = new Regex(pattern);
            foreach (var item in text)
            {
                if (regex.IsMatch(item))
                {
                    Console.WriteLine(item);
                }

0
Maria_ls avatar Maria_ls 383 Точки

1.Ако замениш ^ и $ с \b и \b поне ще ти хваща мейли, които не са сами на ред, а са част от изречение. Тогава идва проблемът, че ще ти хване от примерите за невалидни --123@gmail.com, и .info@info.info  заради това, че никъде не изключваш стринга да започва с . и -- . По принцип се оправя с един интервал преди първото \b (както предложи колегата Пламен), но не знам дали няма да ти направи проблем, защото ще ти мачне по един интервал преди всеки мейл, където има такъв. 

 

0
21/10/2016 16:31:49
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Е да, но аз му ги подавам като стрингове един по един да ги валидира. и тези оп примерите работят.

Така ми е по-лесно и искам да го направя така, но не знам какво изпускам.

Т.е. кодът ми екстрактва мейлите, но явно в джъдж подават нещо, което е различно от примерите и което моят патърн не хваща.

0
21/10/2016 16:32:46
Maria_ls avatar Maria_ls 383 Точки

От примерните инпути няма да ти изкара никакъв резултат, тъй като не ти подават мейл един по един, а ги включват в изречение. ^ $ означават съотв. начало и край на стринг, т.е. поз. 0 и поз. string.Length-1

Това показва ли ти го? Please contact us at: support@github.com.

А видях, че си писала във фейса, че 1 тест не ти минава. Предпоследния ли е?

0
21/10/2016 16:40:04
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Е, виж ми програмта. Аз ги чета в масив от стрингове. Пробвай я във вижуал студито. Работи.

0
Maria_ls avatar Maria_ls 383 Точки

Тъй като не си писала кой тест в джъджа не ти минава - на мен предпоследния тест не ми минаваше и като добавих проверка за предишен символ дали е начало на стринг или \s се оправи, т.е. ако е той - явно подават невалиден мейл, който започва с нещо различно от буква

0
21/10/2016 16:45:21
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Последният не ми минава.

Добавих доста неща, които бях изпуснала, но все още не минава....

http://pastebin.com/J7vwHrrQ

Явно е от сплитването та текста.

0
22/10/2016 08:50:36
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.