Loading...
lapd87 avatar lapd87 103 Точки

[Exercises] Programming Fundamentals - Regex Expressions - Problem{5} - Key Replacer

Колеги моля за малко помощ. Задачата ми гърми на 2 от тестовете (2 и 6) и не мога да разбера защо. Ако може някой да ме насочи какви случай изпускам защото пробвах каквото се сетих.

https://pastebin.com/JuyimkgJ

Тагове:
0
Fundamentals Module
radit68i avatar radit68i 22 Точки
Best Answer

Тук е проблемът  string textPattern = @"(" + startPattern + @"(.{0,}?)" + endPattern + @")+";

Този случай не го хваща A12345BAB,   ако StartPattern = "A", endPattern = "B".

Ако се махне + накрая работи.

string textPattern = @"(" + startPattern + @"(.{0,}?)" + endPattern + @")";

0
radit68i avatar radit68i 22 Точки

Разгледах ти кода, но нещо не се ориентирах какво пропускаш. Може да разгледаш моето решение за насоки(100/100).

https://pastebin.com/xDRKem2u

0
lapd87 avatar lapd87 103 Точки

Честно казано разгледах кода и не намирам пак къде ми е проблема. Дори видях случай които ти не хващаш (start|end), но не разбрах защо хем имаш @ хем ескейпваш \ по няколко пъти и после ги повтаряш?

0
radit68i avatar radit68i 22 Точки

Тук е проблемът  string textPattern = @"(" + startPattern + @"(.{0,}?)" + endPattern + @")+";

Този случай не го хваща A12345BAB,   ако StartPattern = "A", endPattern = "B".

Ако се махне + накрая работи.

string textPattern = @"(" + startPattern + @"(.{0,}?)" + endPattern + @")";

0
lapd87 avatar lapd87 103 Точки

Благодаря!

"A repeated capturing group will only capture the last iteration. Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data."

То си го пишело ама кой да чете :D

Проблема е че явно не съм разбрал действието на "+" до край. Слагайки го предполагах че вместо само първото ще хване всички итерации. Като цяло считам че regex има нужда от повече обясняване в лекции и упражнения. Лично аз ще изгледам видеа за него и от предишни издания.

Ако можеш обясни ми и второто изречение къде точно да сложа тия скоби за да може да ги хваща... Гледах гугъл ама нещо или аз не схващам или нещо бъркам като го изпробвам.

П.С. сложи си предния коментар като нов отговор за да го избера като най-добър отговор и да остане на видно място :)

 

 

0
31/10/2017 09:13:45
radit68i avatar radit68i 22 Точки

Ако питаш за скобите тук string textPattern = @"(" + startPattern + @"(.{0,}?)" + endPattern + @")";

Може и без външните скоби те формират Groups[1], която никъде не използваш, а използваш вътрешните скоби Groups[2];

Ново: string textPattern = startPattern + @"(.{0,}?)" + endPattern;

И тук трябва да сметиш групата от 2 на 1 - result += m.Groups[1].Value;

0
lapd87 avatar lapd87 103 Точки

Не това. Идеята е това Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data.

Т.е. как да запазя "+" и същевременно да не ми хваща само последната група което ми гърмеше.

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