Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

sokitoswag avatar sokitoswag 3 Точки

Advanced c# Exam problems Practice - Problem 3. Extract Hyperlinks (Regex)

Здравейте, имам проблем с една задача от практиката за advanced c# изпита, задачата се решава с регекс.

 https://judge.softuni.bg/Contests/Practice/Index/84#2 това е линкът към задачата, във regex101.com ми намира всички matches, но в програмата ми не . ето го и Regex-а ми - (?<=<a)(.+)\s?href\s*=\s*("|')(.+?)(\2) , ето го и линкът към решението ми http://pastebin.com/uDbPb4Vi - в Judge вади само 33 точки. Ако някой успее да ми помогне и да ми каже къде бъркам ще съм му много благодарен.

Тагове:
2
Fundamentals Module
kidroca avatar kidroca 117 Точки

Здравей, 

ето къде ти е основният проблем: (?<=<a)(.+?)\s?href\s*=\s*("|')(.+?)(\2) и ето защо, сложи ? на посоченото място и ще видиш малко по - добри резултати 

а може и само така: <a(.+?)\s?href\s*=\s*("|')(.+?)\2

Този регекс обаче match-ва 

<a id="href">href='fake'<img src='http://abv.bg/i.gif' alt='abv'/></a>

помисили си как можеш да го оправиш 

 

 

Spoiler - прочети след като се опиташ първо сам


ето как вече работи напълно @"<a([^>]*?)href\s*=\s*(""|')(.+?)\2"

- маркирания регекс оказва до къде да продължи match-ът - да хваща всичко което не е > следователно мачът ще продължи до първият знак > (понеже му е оказано *?) продължението на изразът вече му показва по - конкретно какво да прихваща.

4
09/10/2015 17:34:40
sevdalin avatar sevdalin 38 Точки

Колега поста ти е отдавна, но все пак тъй като аз в момента се мъчех с тази задача, този регекс "<a([^>]*?)href\s*=\s*("|')(.+?)\2 ", не хваща всичко. Примерно от дългия нулев тест не хваща 2 неща, и едното от тях е "/courses". И на другият колега пробвах регекса ама и той не хваща всичко правилно, дори след твоята "поправка".

1
kidroca avatar kidroca 117 Точки

Това е страхотна новина :), защото ти sevdalin ще трябва да откриеш решението. 


С удоволстиве ще ти помогна със малък joker:

След като разгледах нулевият тест и видях кои изрази не са покрити, останових с не малка изненада че поставянето на стойността на атрибут в кавички не е задължително, нещо което признавам си научавам чак сега (и надявам се ще забравя до 3 дни)

Изразът ще трябва да се промени/допълни по такъв начин, че ако след `href=` не следват кавички да се прихване текстът до първият празен символ - Regex-a оставям на теб, успех


Ето материал който може да помогне за валиирането на израза: https://mathiasbynens.be/notes/unquoted-attribute-values

Поуката е, дори да е позволено, моля ограждайте с кавички стойността на атрибутите angel

0
21/05/2017 19:44:47
sevdalin avatar sevdalin 38 Точки

Благодаря за отговора :) Аз тази задача не успях да я напиша. Опитвах се 1 час някъде да измисля регекса, стигнах до някъде ама не точно до където трябва. А и малко ми беше неясно и условието, защото не знам какви възможности може да има input-a, тъй като не съм много на Ти все още с HTML-a. 

После гледах тук някакви варианти, но в крайна сметка прецених, че искам да си спестя още 2-3 часа мъки за Регекс и да решавам други задачи.

Не знам дали греша или не, но според мен това е Регекс на едно сравнително високо ниво за общите стандарти, а те според моите наблюдения са, че повечето хора поназнайват добре Регекс в един момент (като го учат) после го позабравят и накрая като им трябва нещо в 80-90% от случаите го търсят вече написано/измислено в мрежата :)

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