Loading...
VanessaShopping avatar VanessaShopping 48 Точки

Въпрос свързан с RegEx и задача от изпита на 23.10.2016

Задача 03 Nether Realms

Използвах два шаблона. Единия за да хвана всички букви (за да изчисля живота) и още един за да намеря всички реални числа с + - или без знак.

 string input = Console.ReadLine();
            string[] devils = input.Split(new char[] { ',', ' ' });
            Regex healthPattern = new Regex("([a-zA-Z])");
            Regex dmgPattern = new Regex("([-+]?[0-9]\\.?[0-9]*)");
            Match dmgMatch = dmgPattern.Match(input);
            Match healthMatch = dmgPattern.Match(input);
            Console.WriteLine(dmgMatch);
            Console.WriteLine(healthMatch);

Хваща ми само първата Буква и Първата цифра ? Къде бъркам ми е въпроса :) ???

В сайта regexr.com си ги хваща както трябва, но в задачата ми не става. Пропускам нещо но незнам какво :)

******************

Имам и още един въпрос свързан с Lamda изразите.

Не можах да ги разбера напълно и не мога да схвана логиката. Синтаксиса винаги ли е ( стойност => нещо ) ?

Само за колекции ли се използват ? ( списъци ,масиви). Речниците колекция ли се водят ?

Как по-точно работят тея изрази , в смисъл като bool ли работят ?

Примеро за да открием четните числа от списък:

List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 };
List<int> evenNumbers = list.FindAll(x => (x % 2) == 0); Тук примерно разбирам какво прави израза , но не разбирам как го прави :)

Намери ми всички Х където числото ако го разделиш на %2 ще е равно на 0 ( тоест ще е четно ). По този начин във списъка evenNumbers ще се запишат всички четни числа. Това не мога да разбера как точно става записването. 

Така като го гледам имам чувството ,че работи като foreach цикъл. Минава през всяко число от списъка list проверява го дали е четно ,чрез израза и ако е го записва. Тоест ако ползвам foreach с if проверка би трябвало да постигна същото... ?

 

  

Тагове:
0
Programming Fundamentals
cheresharov avatar cheresharov 42 Точки
Best Answer

Използваш Regex.Match, за това ти връща само едно попадение. Трябва да използавш Regex.Matches

regexr.com ти хваща всички, защото накрая патерна има /g т.е. global search. В C# това е заменено с използването на Matches - "Searches an input string for all occurrences of a regular expression and returns all the matches".

 

А относно LAMBDA ..

по въпросът за четните числа - "обхожда цялата колекция от числа и за всеки елемент от нея (именуван x) се прави проверка дали числото се дели на 2 (с булевия израз (x % 2) == 0) " и връща като резултат колекция с четните числа

1
24/10/2016 23:28:44
Maria_ls avatar Maria_ls 383 Точки

За ламбдата да - и аз мисля, че е на принципа на foreach. А идеята й е да не се занимаваш ти да го пишеш. И можеш да ги използваш навсякъде, където можеш да им измислиш приложение. Като не пропускаш using System.Linq;

А регексите ти хващат по една буква или цифра, щото ([a-zA-Z]) означава точно това. И то ти ги мачва не като една дума от н-символа, а като н-думи с по един символ, затова след [] се слага ? * или + да ти мачне съответно 0 или 1, 0 или колкото се може и 1 или колкото се може пъти дадения символ (в случая всички поредни букви ти ги мачва в една група и ти ги записва в колекция, която можеш да достъпиш и използваш), да не говорим че конкретния по условие би трябвало да ти хваща и всеки символ, различен от цифра, + - / * , . и интервал :)

И също така трябва да предвидиш отделна група или направо регекс за * и /, че с тях си умножаваш или делиш демиджа на 2

1
24/10/2016 23:08:49
IvailoNikolov avatar IvailoNikolov 0 Точки

При мен има проблем с регекса  за хващането на числата за демидж. Регекса ми е  

string pattern = @"([-+]?[0-9]\.?[0-9]*)";

и в http://regexr.com/ ги хваща както трябва, но  в програмата при вход  

M3ph-0.5s-0.5t0.0**

хваща: 3, -05, -0500.

0
Maria_ls avatar Maria_ls 383 Точки

"([-+]?[0-9]\.?[0-9]*)"; В първите скоби [0-9] хващаш само 1 символ и ако случайно имаш втори, точката вече ти бяга, т.к. търси само по 1 цифра и ти ги разделя на различни мачове - ей тъй би трябвало да нямаш пробем ([-+]?[0-9]*\.?[0-9]*)

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