Софтуерно Инженерство
Loading...
+ Нов въпрос
lapd87 avatar lapd87 72 Точки

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

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

https://pastebin.com/JuyimkgJ

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

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

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

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

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

0
radit68i avatar radit68i 21 Точки

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

https://pastebin.com/xDRKem2u

0
lapd87 avatar lapd87 72 Точки

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

0
radit68i avatar radit68i 21 Точки

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

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

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

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

0
lapd87 avatar lapd87 72 Точки

Благодаря!

"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 21 Точки

Ако питаш за скобите тук 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 72 Точки

Не това. Идеята е това 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