Loading...
Plotso avatar Plotso 24 Точки

01.Extract Emails - Programming Fundamentals -Regex (Exercises) Домашно

Здравейте! Имам проблем с първата задача от упражненията за Regular Expressions(Regex).Опитах се да изпълня всяка една подробност от условието и дадените примери ,преди да вкарам regex-а във Visual Studio го пробвах в www.regexr.com и там всичко точно ,след това си написах кода за програмката в студиото и изпробвах с дадените примери и работи всичко ,но получавам 50/100 в judge... Дава ми грешен отговор на 3-ти и 4-ти тест ,които не мога да видя какви са и пооправях кода малко,но така и не успях да мина тези тестове. Моля някой да погледне кода и да каже къде е проблема. Благодаря предварително ! smiley

 

КОД

Regex ---> [A-Za-z0-9](\.|-|_|[A-Za-z0-9])+[A-Za-z0-9]@[A-Za-z]+(\.|-)?[A-Za-z]+\.?\w+

Тагове:
0
Programming Fundamentals
Boris.stavrev92 avatar Boris.stavrev92 42 Точки

100 / 100 - code

Само ще обесня какво прави regex - са :

string pattern = @"(^|(?<=\s))(([a-zA-Z0-9]+)([\.\-_]?)([A-Za-z0-9]+)(@)([a-zA-Z]+([\.\-_][A-Za-z]+)+))(\b|(?=\s))";


1 . (^|(?<=\s)) - Искаме да проверим дали има начало на стринг ИЛИ ( " | ") дали има празно място (това прави първа група)

2.   ([a-zA-Z0-9]+)([\.\-_]?)([A-Za-z0-9]+)(@)  - търсим :

(дума , която съдържа букви и цифри)

(после търсим някой от разрешените символи АКО има някое от тях , затова използваме "?")

(после пак дума , която съдържа букви и цифри)

тука броя на думите може да бъде 1

3. (слагаме @)

4. ([a-zA-Z]+([\.\-_][A-Za-z]+)+) - започваме с търсенето на дума , но задължително след първата дума трябва да има някой от разрешените символи "." ,  "-" или "_" , иначе ще имаш грешката да имаш само една дума , а по условие се искат поне 2 думи и между тях да има един от разрешените символи и накрая domain - a (.bg , .net  и т.н).

например: @mail.uu.net 

([a-zA-Z]+([\.\-_][A-Za-z]+)+) - плюсът е важен за група 8 , тъй като търси още съвпадения ... това ти позволява да имаш маркираш още думи , но задължително да започват със един от разрешените символи

5. (\b|(?=\s))  Същото като 1. - търси за boundery \b Или positive lookahead (или погледни на дясно за да видиш дали има white space)

 

ако не ти е ясно какво правят 1. и 5. Прочети за positive lookahead и negative lookahead :Д

 

5
04/11/2017 19:32:29
Yanusha avatar Yanusha 0 Точки

Супер си го написал.

Благодаря

0
Ven_Valev avatar Ven_Valev 1 Точки

Много благодаря за помощта и обяснението.

1
Mertt893 avatar Mertt893 1 Точки

(^|(?<=\s))(([a-zA-Z0-9]+)([\.\-_]?)([A-Za-z0-9]+)(@)([a-zA-Z]+([\-_]?[A-Za-z]+(\.[A-Za-z]+)+)+))(\b|(?=\s))

 

Давам бъг фикс за 4-та точка - така както си го написал, приема за вярно asd@mail-net, защото е зададено по този начн [\.\-_]. Въпреки, че тестовете не дават грешка, според мен това си е грешка, явно девовете са пропуснали този вариант. Напълно верният вариант за точка 4 мисля, че е ([a-zA-Z]+([\-_]?[A-Za-z]+(\.[A-Za-z]+)+) като търси дума, която не е задължително да е последвана от _ или -, но е задължително да има точка след нея и точката да е последвана от дума.

 

ПП Супер си ги обяснил нещата

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