Advertisement
n4wn4w

C# REGEX

Apr 29th, 2015
402
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 27.59 KB | None | 0 0
  1. \t – табулация
  2. \r – символ за връщане на каретката CR (0x0D)
  3. \n – символ за нов ред LF (0x0А)
  4. \xXX – символ с ASCII код XX (шестнайсетично)
  5. \uXXXX – Unicode символ с номер XXXX (шестнайсетично)
  6. \\ – символ \
  7. \* – символ *
  8. \+ – символ +
  9.  
  10. Класове от символи
  11.  
  12. . – обозначава произволен символ без \n
  13. (.|\s) – обозначава произволен символ
  14. [символи] – обозначава произволен символ от изброените
  15. Пример: [01] обозначава цифрата 0 или 1
  16. [^символи] – обозначава произволен символ, който не е сред изброените
  17. Пример: [^<>\\] обозначава всеки символ без <, > и \
  18. [charX-charY] – обозначава символ в зададения интервал
  19. Пример: [0-9A-F] обозначава всеки символ, който е цифра или латинска буква между A и F
  20.  
  21.  
  22. Класове от символи
  23.  
  24. \w – обозначава буквите, цифрите и символа _ (за всички езици от Unicode)
  25. \W – обозначава всички символи с изключение на буквите, цифрите и _
  26. \s – обозначава символите за празно пространство (интервал, табулация, нов ред, ...)
  27. \S – обозначава символите, които не са празно пространство
  28. \d – обозначава десетичните цифри [0-9]
  29. \D – обозначава всички символи, които не са десетични цифри
  30.  
  31. Метасимволи за количество
  32.  
  33. * – нула или повече срещания
  34. Пример: [01]* обозначава всички символни низове, съставени от цифрите 0 или 1, включително празния низ
  35. + – едно или повече срещания
  36. Пример: [A-Z]+ задава непразните символни низове, съставени от главни латински букви
  37. ? – нула или едно срещания
  38. Пример: [A-Z]? обозначава главна латинска буква или празен низ
  39. {n} – точно n срещания
  40. Пример: [0-9]{3} обозначава последователност от точно 3 цифри
  41. {n,} – поне n срещания
  42. Пример: [0-9]{5,} обозначава последователност от поне 5 цифри
  43. {n,m} – поне n и най-много m срещания
  44. Пример: [0-9]{2,4} обозначава последователност от 2, 3 или 4 цифри
  45. *? – нула или повече срещания, но най-малкият възможен брой
  46. +? – едно или повече срещания, но най-малкият възможен брой
  47. {n,}? – поне n срещания, но най-малкият възможен брой
  48.  
  49. Метасимволи за местоположение
  50.  
  51. \b – указание за търсене само в началото или края на дума – на границата между символите \w и \W, но в рамките на \w
  52. Пример: \b\w*бир\w*\b обозначава всички думи, съдържащи като подниз "бир", например "бира", "обирам" но не и "налей ми биричка"
  53. Пример: .*?ра\b обозначава всички най-къси поднизове, завършващи на "ра", например "кака Мара" и "дай бира", но не и
  54. "бира няма" и "подай ми бирата"
  55. \B – указание за търсене само в средата на думата (без началото и края)
  56. Пример: \w*бира\B ще намери "бира" в текста "Къде ми е бирата?", но няма да намери нищо в текста "Налей ми бира, моме ле!"
  57.  
  58. \A – указание за търсене само в началото на подадения текст (задава се преди низа)
  59. Пример: \Aбира ще намери "бира" в текста "бирата е хладна", но няма да намери нищо в текста "Живот без бира не е живот!"
  60. \z – указание за търсене само в края на текста (задава се след низа)
  61. Пример: бира\Z ще намери "бира" в текста "налей бира", но няма да намери нищо в текста "бирата е хладна"
  62. ^ –  търсене само в началото на текста (в режим multi-line и в началото на всеки ред)
  63. $ –  търсене само в края на текста (в режим multi-line и в края на всеки ред)
  64.  
  65. Други метасимволи
  66.  
  67. Метасимволи за избор:
  68. A|B – задава алтернативен избор между регулярните изрази A и B
  69. Пример: бира|скара ще намери "бира" в текста "Студена ли е бирата?", а в текста "Къде е скарата?" ще намери "скара"
  70. Метасимволи за задаване на групи:
  71. (група), (?<име>група) – задава група в регулярния израз (без име или с име)
  72. Пример: \s*(?<name>\w+)\s*=\s*(\d+)
  73. Групите се използват за логическо отделяне на части от регулярния израз и могат да имат имена
  74.  
  75.  
  76.  
  77. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  78.  
  79.  
  80. Класът Match съдържа описание на едно съвпадение (стойност, начална позиция и дължина), получено в резултат от търсене с регулярен израз
  81. Дава възможност за намиране на следващото съвпадение от търсенето, ако такова има
  82.  
  83. Класът MatchCollection съдържа списък от съвпадения (получени в резултат от търсене)
  84. Класът Group представлява група от символи, съдържаща се в дадено съвпадение (Match). В едно съвпадение може да има няколко групи
  85.  
  86. Класът GroupCollection съдържа списък от групи, съдържащи се в дадено съвпадение
  87. Делегатът MatchEvaluator се използва при заместване с регулярен израз за обработка на всяко едно съвпадение
  88. Изброеният тип RegexOptions се използва за задаване на опции за търсенето с рег. изрази
  89.  
  90. С Regex може да се работи по два начина:
  91. Инстанцира се класът и в конструктора му се подава регулярен израз, след което му се извикват методите за обработка на текст (IsMatch, Match, Matches, Replace, Split)
  92. Използват се статичните методи на класа (IsMatch, Match, Matches, Replace, Split), на които се подава текста за обработка и регулярен израз, който да се използва
  93.  
  94.  
  95. IsMatch(text, pattern) – проверява дали в даден текст се среща поне един подниз, който съответства на даден регулярен израз
  96. Match(text, pattern) – търси зададения регулярен израз в зададения текст и връща първото съвпадение като Match обект
  97. Matches(text, pattern) – търси зададения регулярен израз в зададения текст и връща  MatchCollection от всички съвпадения
  98. Replace(text, pattern, replacement) – замества всички срещания за даден регулярен израз в даден текст със заместващ текст, който може да съдържа части от намерените съвпадения (групи в рег. израз
  99.  
  100. string[] Split(text, pattern) – разделя даден низ на части по даден регулярен израз
  101.  
  102. Options – свойство от тип RegexOptions, което задава някои настройки на израза (като Singleline, Multiline, IgnoreCase и  IgnorePatternWhitespace)
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109. reg ex za telefoni ->(\+359\-[0-9]{1}\-[0-9]{3}\-[0-9]{4})|(\+359\s[0-9]{1}\s[0-9]{3}\s[0-9]{4})
  110.  
  111. reg ex imena -> ([A-Z][a-z]+\s[A-Z][a-z]+)
  112.  
  113.  
  114.  
  115. primeri replace   ///////////////////////////////////////////////////////////
  116.  
  117. replce primer /////////////////////////
  118.  
  119.   String text = "Here is the link:<br>" +
  120.       "[URL=http://www.devbg.org]БАРС[/URL]<br>\n" +
  121.       "and the logo:[URL=http://www.devbg.org][IMG]\n" +
  122.       "http://www.devbg.org/basd-logo.png[/IMG][/URL]\n";
  123.     string pattern = @"\[URL=(?<url>[^\]]+)\]" +
  124.         @"(?<content>(.|\s)*?)\[/URL\]";
  125.     string newPatt = "<a href=\"${url}\">${content}</a>";
  126.     string newText =
  127.        Regex.Replace(text, pattern, newPatt);
  128.     Console.WriteLine(newText);
  129.  
  130. reg ex replace ////////////////////
  131.  
  132.     String text = "Here is the link:<br>" +
  133.       "<a =http://www.devbg.org]БАРС</a><br>\n" +
  134.       "and the logo:<a =http://www.devbg.org][IMG]\n" +
  135.       "http://www.devbg.org/basd-logo.png[/IMG]</a>\n";
  136.  
  137.  
  138.             string pattern = @"\<a =(?<url>[^\]]+)\]" +
  139.                 @"(?<content>(.|\s)*?)\</a>";
  140.             string newPatt = "[URL href=\"${url}\"]${content}[/URL]";
  141.             string newText =
  142.                Regex.Replace(text, pattern, newPatt);
  143.             Console.WriteLine(newText);
  144.  
  145.  
  146. 2 varian reg ex replace ///////////////////////
  147.  
  148. String text = "Here is the link:<br>" +
  149.       "[URL=http://www.devbg.org]БАРС[/URL]<br>\n" +
  150.       "and the logo:[URL=http://www.devbg.org][IMG]\n" +
  151.       "http://www.devbg.org/basd-logo.png[/IMG][/URL]\n";
  152.             string pattern = @"\[URL=(?<url>[^\]]+)\]" +
  153.                 @"(?<content>(.|\s)*?)\[/URL\]";
  154.             string newPatt = "<a href=\"${url}\">${content}</a>";
  155.             string newText =
  156.                Regex.Replace(text, pattern, newPatt);
  157.             Console.WriteLine(newText);
  158.  
  159.  
  160. //////////////////////////za dati /////////////////////////////////////////////////////////
  161.    
  162.     String text = "17.03.2004 12:11:05";
  163.  
  164. string pattern =
  165.     @"\A(?<day>\d+)          # day in the beginning
  166.    (\.|\/)                  # separator (. or /)
  167.    (?<month>\d+)            # month
  168.    (\.|\/)                  # separator (. or /)
  169.    (?<year>(19|20)?\d{2})   # year (19XX, 20XX or XX)
  170.    \s+                      # whitespace
  171.    (?<hour>\d+)             # hour
  172.    :                        # separator
  173.    (?<min>\d+)              # minutes
  174.    (:(?<sec>\d+))?          # seconds (optional)";
  175.  
  176. Match match = Regex.Match(text, pattern,
  177.     RegexOptions.IgnorePatternWhitespace);
  178.  
  179.     if (match.Success)
  180. {
  181.     GroupCollection gr = match.Groups;
  182.     Console.WriteLine("day={0} month={1} year={2}\n" +
  183.         "hour={3} min={4} sec={5}",
  184.         gr["day"], gr["month"], gr["year"],
  185.         gr["hour"], gr["min"], gr["sec"]);
  186. }
  187. else  
  188. {
  189.     Console.WriteLine("Invalid date and time!");
  190. }
  191.  
  192.  
  193.  
  194.  
  195.  
  196. //////////////// regex  skara bira ///////////////////////////
  197.  
  198. string text = "Няма скара, няма бира, ира иранмаика няма к,во да ям.";
  199.  
  200.             string pattern = @"\w*ира|скара|\w*ям\w*";
  201.  
  202.             Match match = Regex.Match(text, pattern);
  203.  
  204.             while(match.Success)
  205.             {
  206.                 Console.WriteLine("niz : \" {0} - nachalo {1} , duljina {2}",
  207.                     match , match.Index, match.Length);
  208.                
  209.                 match = match.NextMatch();
  210.             }
  211.  
  212. // poneje imame \w* na IRA she mi vzima  dumi samo koito imat 0 ili edna bukva predi IRA ako beshe \w+ shteshe da vzima dumi s pone edna bukva predi ira // i za QM mi vzima i ot dvete strani 0 ili poveche bukvi
  213.  
  214.  
  215. ///////////////// reg ex e mail adres /////////////////////////////////////
  216.  
  217.  
  218. string email = "test-1.p4@ala-bala.somehost.somewhere.bg";
  219.  
  220.             string regex = @"^([a-zA-Z0-9_\-][a-zA-Z0-9_\-\.]{0,49})"+
  221.                 @"@(([a-zA-Z0-9][a-zA-Z0-9\-]{0,49}\.)+[a-zA-Z]{2,4})$";
  222.  
  223.             bool valid = Regex.IsMatch(email , regex);
  224.  
  225.             Console.WriteLine(valid);
  226.  
  227.  
  228. // za e maila za tova purvata grupa e razdelena na 2 4asti za da ne moje da zapochva maila sus . i {da e ot 0 ili 49 simvola} vtorata grupa() zapo4va s @ i vinagi trqbva da e bukva ili 4islo i da zavurshva sus . i 3 grupa e za com mejdu 2 i 4 bukvi v kraq na dumata $
  229.  
  230.  
  231.  
  232.  
  233. /////////////// reg ex html 1;50;00  /////////////////////////////////////////////////////////////////
  234.  
  235.  
  236.             string text = @"<html> This is a hyperlink:
  237. <a href=""javascript:'windod.close()'"">
  238. close the windows</a><br> ... and one more link : <a target=""_blank"" href=/main.aspx class='link'> <b>
  239. main page</b> </a>< a href = 'http://www.nakov.com'
  240. > <img src='logo.gif'>Nakov's home site < /a >";
  241.  
  242.             string pat = @"<\s*a\s[^>]*\bhref\s*=\s*" +
  243.                 @"('[^']*'|""[^""]*""|\S*)[^>]*>" +
  244.                 @"(.|\s)*?<\s*/a\s*>";
  245.  
  246.  
  247.             Match match = Regex.Match(text, pat);
  248.  
  249.             while (match.Success)
  250.             {
  251.                 Console.WriteLine("{0}\n\n", match);
  252.                 match = match.NextMatch();
  253.             }
  254.  
  255. @"<\s*a\s[^>]*\bhref\s*=\s*" +
  256. започва със символа "<" и преминава през празното пространство след него (ако има)
  257. търси символ "a", следван задължително от празно пространство
  258. преминава през неопределен брой символи докато намери дума "href" (ако тагът има други атрибути преди "href", ги пропуска)
  259. търси символа "=", евентуално предшестван и следван от празно пространство
  260.  @"('[^']*'|""[^""]*""|\S*)[^>]*>" +
  261. ако следват двойни кавички или апостроф, преминава през 0 или повече символа до намиране на съответни затварящи двойни кавички или апостроф
  262. ако не следват двойни кавички или апостроф, преминава през 0 или повече символа различни от празно пространство
  263. пропуска всички символи до намиране на символ ">" и преминава през него
  264.  @"(.|\s)*?<\s*/a\s*>";
  265. преминава през 0 или повече произволни символи, като се стреми броят им да е минимален (помислете защо е нужно това?)
  266. търси затварящ таг "</a>", евентуално съдържащ на места разделящи символи празно пространство (whitespace)
  267.  
  268.  
  269.  
  270. ///////////// GROUPS match ip   ////////////////////////////////////
  271.  
  272.  
  273.  
  274.             string text = "gosho 62.44.18.124 02:44:50\n" +
  275.                 "root 193.168.22.18  22:12:38\n" +
  276.                 "nakov 217.9.231.126 00:07:24";
  277.  
  278.  
  279.             string pattern = @"(?<name>\S+)\s+(?<ip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\s+(?<time>[0-9:]+)";
  280.  
  281.             MatchCollection match = Regex.Matches(text, pattern);
  282.  
  283.  
  284.             foreach (Match i in match)
  285.             {
  286.                 Console.WriteLine("name = {0,-8} ip={1,-16} time={2}",
  287.                     i.Groups["name"], i.Groups["ip"], i.Groups["time"]);
  288.             }
  289.  
  290.  
  291. // primer za grupi  imame grupa ime (?<name>\S+)\s+ razdelena ot pone 1 prazno mqsto
  292. // ip koeto mi (?<ip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\s+ koeto zima posledovatelnost ot 4 grupi 4isla koito da sa s duljina ot 1 do 3 cifri i da sa razdeleni s . i ima pak edno \s+
  293. //i grupa time koeot e sushtoto kato grupata na ip pak ot 0-9 pak 1 ili 2 i da e razdeleno s :
  294.  
  295.  
  296. ///////////////////////2;12;30 tursene na duma v text ////////////////////////////////
  297.  
  298.  string text = "We are living in an yellow submarine. We don't have anything else. Inside the submarine is very tight. So we are drinking all the day. We will move out of it in 5 days.";
  299.             string pattern = @"\s*in\s*"; // mi vzima vsqka duma sudurjashta in  in =9
  300.             string pattern1 = @"\s+in\s+"; // izkarva samo in vuv teksta in = 2
  301.  
  302.             Console.Write("in  = ");
  303.             Console.Write(Regex.Matches(text, pattern, RegexOptions.IgnoreCase).Count);
  304.             Console.WriteLine();
  305.  
  306. // vzima ami kolko puti se srshta in v teksta ako e \s*in\s* go vzima do vsqka bukva ako e \s+in\s+" vzima samo dumata in i otsrani na nego razstoqniq
  307. // i primer za case sensitive
  308.  
  309. ///////////////////   grupa v teskst TOUPER   /////////////////////////////////////////////////////////
  310.  
  311.  
  312. string text = "We are living in a <upcase>yellow submarine</upcase>. We don't have <upcase>anything</upcase> else.";
  313.  
  314.  
  315.             string regex = @"<upcase>(?<capitals>(.|\s)*?)</upcase>";
  316.  
  317.  
  318.             Console.WriteLine(Regex.Replace(text, regex, m => m.Groups["capitals"].Value.ToUpper()));
  319.  
  320.  
  321.  
  322. // ot malki v glavni bukvi v tekst vlizame v grupata koqto e e ot <upcase> </upcase> i tova koeot e vutre  nejdu tezi tagove  s grupata <capitals> / vliza 0 ili pone edin put i vzima vseki simvol v neq  sus (.|\s) no nai-malkiqt broi
  323.  
  324. ///////////////////8  tursene na celi izrecheniq v tekst //////////////////////////////////////
  325.  
  326.  
  327.  
  328. string text = "We are living in a yellow submarine. We don't have anything else. Inside the submarine is very tight. So we are drinking all the day. We will move out of it in 5 days.";
  329.             string word = @"\s*(?<sentenceName>[^\.]*?\bin\b(.|\s)*?\.)";
  330.  
  331.  
  332.             MatchCollection matches = Regex.Matches(text, word , RegexOptions.IgnoreCase);
  333.  
  334.  
  335.             foreach (Match match in matches)
  336.             {
  337.                 Console.WriteLine(match.Groups["sentenceName"]);
  338.  
  339. // machvane na izrechenie v teskta tursi da e [^\.] ne moje da zapochva s . zashtoto taka zapochva izrechenieto tursi smao dumata IN i vsi4ki simvoli no nai-malkiqt broi 8?  dokudo stigne do \.
  340.  
  341. ///////////////////////// 9 zadacha REPLACE   //////////////////////////////////////
  342.  
  343.  
  344.  
  345.  
  346.           string text = "Microsoft announced its next generation PHP compiler today. It is based on .NET Framework 4.0 and is implemented as a dynamic language in CLR.";
  347.  
  348.             string forbidWords = @"(?<pesho>\b(PHP|CLR|Microsoft)\b)";
  349.  
  350.             Console.WriteLine(Regex.Replace(text, forbidWords, m => new String('*', m.Groups["pesho"].Length)));
  351.  
  352.            
  353. // zamestva dumite ot grupata  s *****************
  354.  
  355.  
  356. ////////////////// 13 reverse izrechenie   ////////////////////////////
  357.  
  358.  
  359.   string text = "C# is not C++, not PHP and not Delphi! Kondio e: nai-golemiqt gei?";
  360.  
  361.             string regex = @"\s+|\,\s*|\;\s*|\:\s*|\-\s*|\!\s*|\?\s*|\.\s*";
  362.  
  363.  
  364.             Stack words = new Stack();
  365.             Queue separators = new Queue();
  366.  
  367.             string[] wordsInSentence = Regex.Split(text, regex);
  368.  
  369.             foreach (var w in wordsInSentence)
  370.             {
  371.                 if (w != "")
  372.                 {
  373.                     words.Push(w);
  374.                 }
  375.             }
  376.  
  377.             MatchCollection separatorsInSentance = Regex.Matches(text, regex);
  378.  
  379.             foreach (var s in separatorsInSentance)
  380.             {
  381.                 separators.Enqueue(s);
  382.             }
  383.  
  384.             StringBuilder reversSentance = new StringBuilder();
  385.  
  386.             while(words.Count> 0 && separators.Count >0)
  387.             {
  388.                 reversSentance.Append(words.Pop());
  389.                 reversSentance.Append(separators.Dequeue());
  390.             }
  391.  
  392.            
  393.             Console.WriteLine(reversSentance);
  394.  
  395.  
  396. // pravim si regex i natrupvame dumite v stek a simvolite ot regex v opashkata pole pravim stringbuilder i v nego natrupvame kato izkarvame ot steka i opashkata i zardi prirodata im opashkata e purvoto izlzlo purvoto vlazlo i steka e purvito izlazlo poslednoto vlqzlo i taka se zapazva posledovatelnostta v izrechenieto na razstoqniqt i zapetaite
  397.  
  398.  
  399.  
  400.  
  401. ////////////////////  14 dictionary words  ////////////////////////////
  402.  
  403.  
  404.  string text = @".NET - platform for applications from Microsoft
  405.                        CLR - managed execution environment for .NET
  406.                        NAMESPACE - hierarchical organization of classes";
  407.  
  408.  
  409.             string searchWord = Console.ReadLine().ToUpper();     // clr / .NET / NAMESPACE
  410.  
  411.             string regex = searchWord + @"(\s+?)\-(\s+?)(?<def>((.|\s)*?))\r";
  412.  
  413.             MatchCollection matches = Regex.Matches(text, regex, RegexOptions.IgnoreCase);
  414.  
  415.             if (matches.Count > 0)
  416.             {
  417.                 foreach (Match kur in matches)
  418.                 {
  419.                     Console.WriteLine(searchWord + " - " + kur.Groups["def"]);
  420.                 }
  421.             }
  422.             else
  423.             {
  424.                 Console.WriteLine("this word is not exist");
  425.             }
  426.  
  427. // slagame sreach worda i da mi tursi definiciqta  na redu sako imame pone edno prazno mqsto \- pone endo prazno mqsto i da vzima vsqki simvol no nai-malkiqt broi ((.|\s)*?)  i da vzushta redut \r
  428.  
  429.  
  430.  
  431.  
  432.  
  433. ///////////////////// regex replace  <a> href  ////////////////////////////////
  434.  
  435.  
  436.  const string HTML = @"<p>Please visit <a href=""http://academy.telerik.com"">our site</a>
  437.            to choose a training course. Also visit <a href=""www.devbg.org"">our forum</a> to discuss the courses.</p>";
  438.  
  439.  
  440.             string regex = @"<\s*a\s[^>]*\bhref\s*=\s*('(?<hyperlink>[^']*)'|""(?<hyperlink>[^""]*)""|(?<hyperlink>\S*))[^>]*>(?<hyperlinktext>(.|\s)*?)<\s*/a\s*>";
  441.  
  442.  
  443.             Console.WriteLine(Regex.Replace(HTML, regex, m => "[URL=" + m.Groups["hyperlink"].Value + "]" + m.Groups["hyperlinktext"].Value + "[/URL]"));
  444.  
  445.  
  446. ///////////////////////////////////////////////// 18 zadacha  namirane na EMAIL  //////////////////////////////////////
  447.  
  448. string text = @"jaoifalkfalfla nasko_pl@mail.bg  
  449.            test-1.p4@ala-bala.somehost.somewhere.bg
  450.            jaklhfajkh kjh hwjkhakj hakj hkajh akjh kajwh kjawh kjawh
  451.            kah akj  kondio_pl@mail.bg";
  452.  
  453.             string regex = @"\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b";
  454.  
  455.             MatchCollection matches = Regex.Matches(text, regex, RegexOptions.IgnoreCase);
  456.  
  457.             foreach (Match i in matches)
  458.             {
  459.                 Console.WriteLine(i.Value);
  460.             }
  461.  
  462.  
  463. /////////////////////////////// 19 zadacha  validacia na data   ///////////////////////////////////////
  464.  
  465.  
  466.  string text = @"Iwas born in 12.12.1991 and now is 01.25.2015  or 03.31.1015 ";
  467.  
  468.             string regex = @"((((0?[1-9])|[12][0-9]|3[01])\.((0?[13578])|(1[02])))|(((0?[1-9])|[12][0-9]|30)\.((0?[469])|11))|(((0?[1-9])|[12][0-9])\.(0?2)))\.\d{4}";
  469.  
  470.             MatchCollection matches = Regex.Matches(text, regex, RegexOptions.IgnoreCase);
  471.  
  472.             foreach (Match i in matches)
  473.             {
  474.                 Console.WriteLine(i.Value);
  475.                 Console.WriteLine(DateTime.Parse(i.Value).ToString(CultureInfo.GetCultureInfo("en-CA")));
  476.             }
  477.  
  478.  
  479. // imame 3 vuzmojnosti za mesecite s 30 , 31 i februari (((0?[1-9])|[12][0-9]|3[01])\. kato tov ami e denq ot meseca posledvan ot . ((0?[13578]) tova sa vuzmojnite meseci s 31 dena i tak i za sledvashtite dati
  480.  
  481.  
  482. ///////////////////  21 broene na bukvi  ///////////////////////////////////
  483.  
  484.  
  485. string text = "C# is not C++, not PHP and not Delphi! Kondio e: nai-golemiqt gei?".ToUpper();
  486.  
  487.             string regex = @"(?i)[^A-Z]+?";
  488.  
  489.             string alphabet = Regex.Replace(text, regex, String.Empty, RegexOptions.IgnoreCase);
  490.  
  491.  
  492.            byte[] letters = new byte[26];
  493.  
  494.            for (int i = 0; i < alphabet.Length; i++)
  495.            {
  496.                letters[alphabet[i] - 65]++;
  497.            }
  498.          
  499.            for (int i = 0; i < letters.Length; i++)
  500.            {
  501.                if (letters[i] != 0)
  502.                {
  503.                    Console.WriteLine("{0} {1}", (char)(i + 65), letters[i]);
  504.                }
  505.  
  506.            }
  507.  
  508.  
  509. //////////////////////////// 22 broene na dumi /////////////////////////////////////////////////
  510.  
  511.  string text = "C# is not C++, not PHP and not Delphi! Kondio e: nai-golemiqt gei?";
  512.  
  513.             string regex = @"[A-Z]+";
  514.  
  515.  
  516.             Dictionary<string, int> wordOccurrences = new Dictionary<string, int>();
  517.  
  518.             MatchCollection matches = Regex.Matches(text, regex, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
  519.  
  520.  
  521.             foreach (Match i in matches)
  522.             {
  523.                if(i.Value.Length > 2)
  524.                {
  525.                    if (wordOccurrences.ContainsKey(i.Value))
  526.                    {
  527.                        wordOccurrences[i.Value]++;
  528.                    }
  529.                    else
  530.                    {
  531.                        wordOccurrences.Add(i.Value, 1);
  532.                    }
  533.                }
  534.             }
  535.  
  536.             List<KeyValuePair<string, int>> sortedDictionary = wordOccurrences.ToList();
  537.  
  538.             sortedDictionary.Sort((x, y) => x.Key.CompareTo(y.Key));
  539.  
  540.            
  541.            
  542.             foreach (KeyValuePair<string, int> it in sortedDictionary)
  543.             {
  544.                 Console.WriteLine("{0}: {1}",it.Key ,it.Value);
  545.             }
  546.  
  547.  
  548. //////////////////////////////// 23 seria ot smao 1 bukva ////////////////////////////////
  549.  
  550.  string text = "CCCAAA# is not C++, not PHP and not Delphi! Kondio e: nai-golemiqt gei?";
  551.  
  552.             string regex = @"(?<letter>[A-Z])\1+";
  553.  
  554.  
  555.             Console.WriteLine(Regex.Replace(text, regex, m=>m.Groups["letter"].Value, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace ));
  556.  
  557.  
  558.  
  559. //////////////////////////////// 25 html dokument //////////////////////////////////////////////////////////
  560.  
  561.  
  562.  string html = @" <html>
  563.                             <head>
  564.                                 <title>News</title>
  565.                             </head>
  566.                             <body>
  567.                                <p>
  568.                                    <a href=""http://academy.terelik.com"">
  569.                                      Terelik Academy
  570.                                    </a>
  571.                                   aims to provide free real-world practical
  572.                                </p>
  573.                             </body>
  574.                             </html>";
  575.  
  576.             string regex = @"[^>]*>\s*(?<text>(.|\s)*?)\s*<";
  577.  
  578.  
  579.        MatchCollection text = Regex.Matches(html, regex, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
  580.  
  581.  
  582.        foreach(Match ig in text)
  583.        {
  584.            Console.WriteLine(ig.Groups["text"].Value);
  585.        }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement