Въпрос свързан с 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 проверка би трябвало да постигна същото... ?
При мен има проблем с регекса за хващането на числата за демидж. Регекса ми е
string pattern = @"([-+]?[0-9]\.?[0-9]*)";
и в http://regexr.com/ ги хваща както трябва, но в програмата при вход
M3ph-0.5s-0.5t0.0**
хваща: 3, -05, -0500.
"([-+]?[0-9]\.?[0-9]*)"; В първите скоби [0-9] хващаш само 1 символ и ако случайно имаш втори, точката вече ти бяга, т.к. търси само по 1 цифра и ти ги разделя на различни мачове - ей тъй би трябвало да нямаш пробем ([-+]?[0-9]*\.?[0-9]*)