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

[Exam] Programming Fundamentals - November 5th - Problem{3} - Anonymous Vox

Привет,

ако може някой да помогне с едно проблемче което ме гложди :)

В кода ми https://pastebin.com/HdycmNpr се опитах да вкарам код от https://stackoverflow.com/questions/8809354/replace-first-occurrence-of-pattern-in-a-string, но нещо не ми се получи. Закоментирал съм това което искам да направя, а иначе виждате и как съм го избегнал проблема за да си взема точките. Идеята е че при мачване на регекса, мача може да се съдържа и в остатъка от стринга, но просто без start/end и следователно там не трябва да се замества. От форума това което виждам е че би трябвало да има начин с решение на един ред, но така и не успявам да го направя. Моля някой който е наясно с Regex.Replace да обясни как да му сложа ограничение примерно само за първото срещане на текста. Ето това бяха предложили там (единицата накрая), но при мен не успях да го имплементирам:

var regex = new Regex(Regex.Escape("o"));
var newText = regex.Replace("Hello World", "Foo", 1);

Тагове:
0
Fundamentals Module 06/11/2017 16:39:37
KrasiyMihajlov avatar KrasiyMihajlov 139 Точки
Best Answer

Идеята е че всеки път трябва да си правиш нов регекс от самият стринг, който искаш да реплейснеш.

Така успях да го накрам да работи коректно и сменя само по един резултат.

https://pastebin.com/AJR5PqUr

0
Victuss avatar Victuss 18 Точки

Трябва да му дадеш начален индекс за 100% сигурност, че ще риплейсне, където трябва. Аз съм ползвал Replace метода на Stringbuilder класа. Само трябва да се въведе една променлива, която да отчита корекция при промяна в дължината на текста от разлика в дължините на риплейсван и риплейснат стринг:

https://pastebin.com/TYzfFmR3

 

0
08/11/2017 12:52:32
lapd87 avatar lapd87 103 Точки

Според мен е излишно сложно, но не това е въпроса. Идеята е да разбера как работи горния метод.

0
martinml avatar martinml 297 Точки

regex.Replace(text, "asd") ще върне text, но всички match-ове на regex-a ще бъдат заменени с asd.

regex.Replace(text, match => match.Value + "asd") ще добави след match-овете asd.

Можеш да добавиш трети аргумент, за да кажеш колко match-a да бъдат заменени.

Например regex.Replace(text, "asd", 1) ще замести само първия match.

0
06/11/2017 19:16:59
lapd87 avatar lapd87 103 Точки

" Например regex.Replace(text, "asd") ще замести само първият match "

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

0
lapd87 avatar lapd87 103 Точки

Благодаря на всички които се включиха вече смятам че разбрах логиката :)

0
peter1998 avatar peter1998 5 Точки

Колега какво матчва това : ([a-zA-Z]+)(.+)(\1) 

пример : ([a-zA-Z]+)(.+)(\1)

0
peter1998 avatar peter1998 5 Точки

Колега супер парче код си намерил знаеш ли беше пропуснал само от инпута да му кажеш от къде да почне да реплейсва ти му беше казал 0 иначе всичко друго точно за reg.Replace беше сложил count 1 в инпут стринга и реплейса да е start ето :

 

input = reg.Replace(input, item.Groups[2].Value, 1, 0);

-първо беше нула

input = reg.Replace(input, item.Groups[2].Value, 1, startIndex );

-след фикса

0
lapd87 avatar lapd87 103 Точки

Виж отговора на колегата който съм маркирал като най-добър. Идеята ми да ползвам това е да пропусна startIndex и Length (редове 31,32,34) за да стане на един ред :) Фикса ти пак ползва допълнителната променлива :) Иначе се радвам че решението ми е помогнало да научиш нещо ново. Аз дори след като взех точките останах над час на изпита да се мъча да го подкарам това...

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