Софтуерно Инженерство
Loading...
sevgin0954 avatar sevgin0954 564 Точки

C# Regex проблем

Даден е текст. Напишете програма, която променя регистъра на буквите до главни на всички места в текста, заградени с таговете <upcase> и </upcase>. Таговете не могат да бъдат вложени.

Пример:

We are living in a <upcase>yellow submarine</upcase>. We don't have <upcase>anything</upcase> else.

Резултат:

We are living in a YELLOW SUBMARINE. We don't have ANYTHING else.

Тагове:
0
Programming Fundamentals 03/06/2017 21:13:43
ppbaev avatar ppbaev 156 Точки
Best Answer

        string text = Console.ReadLine();
        Regex regex = new Regex(@"<upcase>(.*?)</upcase>");
        Console.WriteLine(regex.Replace(text, m => m.Groups[1].ToString().ToUpper()));

1
sevgin0954 avatar sevgin0954 564 Точки

А може ли да ми обесниш какво точно са  m  и  => и какво правят

0
03/06/2017 22:05:58
ppbaev avatar ppbaev 156 Точки

Ако не знаеш какво е, мога да те насоча към лекции от типа функционално програмиране, LINQ в C#, трябва да ги има в курсовете Advanced C#.

 

Иначе най-просто това е ламбда израз, в лявата страна стои променлива/и, в случая m, после има =>, което си е просто стрелка, отдясно - какво действие искаме да извършим с променливатата. Ако задържиш мишката върху m във Visual studio, ще ти каже, че m e от тип Match, това е резултата от мачването на регекса. Можем да извикаме всеки метод върху тоя Match, който връща накрая string, защото на метода Replace му трябва някакъв string, с който да заменя. Цялото нещо е съкратен запис на метод, който се вика всеки път щом се намери match и текущия match се подава като стойност в променливата m. Това се прави с делегат, ама това за друг път си го остави.

 

същия код без ламбдата, а с метод - https://pastebin.com/X4RxeX3S

1
03/06/2017 22:58:08