Dt5_regex.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. // Регулярные выражения
  2. // Пример регулярки в С#
  3. using System.Text.RegularExpressions;
  4. string s = "Бык тупогуб, тупогубенький бычок, у быка губа бела была тупа";
  5. Regex regex = new Regex(@"туп(\w*)");
  6. MatchCollection matches = regex.Matches(s);
  7. if (matches.Count > 0)
  8. {
  9. foreach (Match match in matches)
  10. Console.WriteLine(match.Value);
  11. }
  12. else
  13. {
  14. Console.WriteLine("Совпадений не найдено");
  15. }
  16. //Поиск с группами
  17. using System.Text.RegularExpressions;
  18. string text = "One car red car blue car";
  19. string pat = @"(\w+)\s+(car)";
  20. Regex r = new Regex(pat, RegexOptions.IgnoreCase);
  21. Match m = r.Match(text);
  22. int matchCount = 0;
  23. // можно искать не одно вхождение, а несколько
  24. while (m.Success)
  25. {
  26. Console.WriteLine("Match"+ (++matchCount));
  27. // тут можно было бы перебирать по длине массива Groups,
  28. // но мы по своему шаблону и так знаем, что у нас две подгруппы
  29. for (int i = 1; i <= 2; i++)
  30. {
  31. Console.WriteLine($"Group {i}='{m.Groups[i]}'");
  32. }
  33. // поиск следующей подстроки соответсвующей шаблону
  34. m = m.NextMatch();
  35. }
  36. //Проверка на соответствие строки формату
  37. using System.Text.RegularExpressions;
  38. string pattern = @"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
  39. @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$";
  40. while (true)
  41. {
  42. Console.WriteLine("Введите адрес электронной почты");
  43. string email = Console.ReadLine();
  44. if (Regex.IsMatch(email, pattern, RegexOptions.IgnoreCase))
  45. {
  46. Console.WriteLine("Email подтвержден");
  47. break;
  48. }
  49. else
  50. {
  51. Console.WriteLine("Некорректный email");
  52. }
  53. }
  54. // Вывод:
  55. Введите адрес электронной почты
  56. archebalu2006@gmail.com
  57. Email подтвержден
  58. // Замена и метод Replace
  59. string s = "Мама мыла раму. ";
  60. string pattern = @"\s+";
  61. string target = " ";
  62. Regex regex = new Regex(pattern);
  63. string result = regex.Replace(s, target);
  64. //Задание на дом:
  65. //2. Лабораторную по теме "строки" реализовать через регулярки (где это возможно)
  66. // Задача №1(Номера автобусов):
  67. using System.Text.RegularExpressions;
  68. string Jo = @"^[A-Z]{1}\d{3}[A-Z]{2}$";
  69. Console.WriteLine("Введите регистрационные номера: ");
  70. string Car;
  71. do
  72. {
  73. Car = Console.ReadLine();
  74. if (!string.IsNullOrEmpty(Car))
  75. {
  76. if (Regex.IsMatch(Car, Jo))
  77. {
  78. Console.WriteLine("Номер соответствует стандарту. ");
  79. }
  80. else
  81. {
  82. Console.WriteLine("Номер не соответствует стандарту. ");
  83. }
  84. }
  85. } while (!string.IsNullOrEmpty(Car));
  86. // Задача №2 (Сжатие бинарных последовательностей):
  87. using System.Text.RegularExpressions;
  88. Console.WriteLine("Введите последовательность: ");
  89. string voi = Console.ReadLine();
  90. string comp = CompressBinary(voi);
  91. string CompressBinary(string? s)
  92. {
  93. string comp = Regex.Replace(voi, "1+|0+", m => ((char)('a' + m.Value.Length - 1)).ToString());
  94. return comp;
  95. }
  96. Console.WriteLine("Сжатая последовательность: " + comp);
  97. // Задача №3 (Стрелки):
  98. using System.Text.RegularExpressions;
  99. Console.WriteLine("Введите стрелы: ");
  100. string strel = Console.ReadLine();
  101. string patt = @"(>>-->)|(<--<<)";
  102. MatchCollection match = Regex.Matches(strel, patt);
  103. Console.WriteLine("Количество стрел: " + match.Count);
  104. //Задача №4 (Нумеролог):
  105. Console.WriteLine("Введите время жизни человека в секундах: ");
  106. string voi = Console.ReadLine();
  107. int count = 0;
  108. while (voi.Length > 1)
  109. {
  110. int sum = voi.Sum(c => c - '0');
  111. count++;
  112. Console.WriteLine($"Промежуточная сумма на шаге {count}: {sum}");
  113. voi = sum.ToString();
  114. }
  115. Console.WriteLine($"Количество операций: {count}");
  116. Console.WriteLine($"Полученная цифра: {voi}");
  117. // Задача №5 (Перестановка):
  118. using System.Text.RegularExpressions;
  119. Console.WriteLine("Введите два слова: ");
  120. string name1 = Console.ReadLine();
  121. string name2 = Console.ReadLine();
  122. name1 = Regex.Replace(name1.ToLower(), @"\s+", "");
  123. name2 = Regex.Replace(name2.ToLower(), @"\s+", "");
  124. char[] name1Chars = name1.ToCharArray();
  125. Array.Sort(name1Chars);
  126. string sortedName1 = new string(name1Chars);
  127. char[] name2Chars = name2.ToCharArray();
  128. Array.Sort(name2Chars);
  129. string sortedName2 = new string(name2Chars);
  130. if (sortedName1.Equals(sortedName2))
  131. {
  132. Console.WriteLine("Из одного имени можно получить другое.");
  133. }
  134. else
  135. {
  136. Console.WriteLine("Из одного имени нельзя получить другое.");
  137. }