123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- // Регулярные выражения
- // Пример регулярки в С#
- using System.Text.RegularExpressions;
- string s = "Бык тупогуб, тупогубенький бычок, у быка губа бела была тупа";
- Regex regex = new Regex(@"туп(\w*)");
- MatchCollection matches = regex.Matches(s);
- if (matches.Count > 0)
- {
- foreach (Match match in matches)
- Console.WriteLine(match.Value);
- }
- else
- {
- Console.WriteLine("Совпадений не найдено");
- }
-
- //Поиск с группами
- using System.Text.RegularExpressions;
- string text = "One car red car blue car";
- string pat = @"(\w+)\s+(car)";
- Regex r = new Regex(pat, RegexOptions.IgnoreCase);
- Match m = r.Match(text);
- int matchCount = 0;
- // можно искать не одно вхождение, а несколько
- while (m.Success)
- {
- Console.WriteLine("Match"+ (++matchCount));
- // тут можно было бы перебирать по длине массива Groups,
- // но мы по своему шаблону и так знаем, что у нас две подгруппы
- for (int i = 1; i <= 2; i++)
- {
- Console.WriteLine($"Group {i}='{m.Groups[i]}'");
- }
- // поиск следующей подстроки соответсвующей шаблону
- m = m.NextMatch();
- }
- //Проверка на соответствие строки формату
- using System.Text.RegularExpressions;
- string pattern = @"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
- @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$";
- while (true)
- {
- Console.WriteLine("Введите адрес электронной почты");
- string email = Console.ReadLine();
-
- if (Regex.IsMatch(email, pattern, RegexOptions.IgnoreCase))
- {
- Console.WriteLine("Email подтвержден");
- break;
- }
- else
- {
- Console.WriteLine("Некорректный email");
- }
- }
- // Вывод:
- Введите адрес электронной почты
- archebalu2006@gmail.com
- Email подтвержден
- // Замена и метод Replace
- string s = "Мама мыла раму. ";
- string pattern = @"\s+";
- string target = " ";
- Regex regex = new Regex(pattern);
- string result = regex.Replace(s, target);
- //Задание на дом:
- //2. Лабораторную по теме "строки" реализовать через регулярки (где это возможно)
- // Задача №1(Номера автобусов):
- using System.Text.RegularExpressions;
- string Jo = @"^[A-Z]{1}\d{3}[A-Z]{2}$";
- Console.WriteLine("Введите регистрационные номера: ");
- string Car;
- do
- {
- Car = Console.ReadLine();
- if (!string.IsNullOrEmpty(Car))
- {
- if (Regex.IsMatch(Car, Jo))
- {
- Console.WriteLine("Номер соответствует стандарту. ");
- }
- else
- {
- Console.WriteLine("Номер не соответствует стандарту. ");
- }
- }
- } while (!string.IsNullOrEmpty(Car));
- // Задача №2 (Сжатие бинарных последовательностей):
- using System.Text.RegularExpressions;
- Console.WriteLine("Введите последовательность: ");
- string voi = Console.ReadLine();
- string comp = CompressBinary(voi);
- string CompressBinary(string? s)
- {
- string comp = Regex.Replace(voi, "1+|0+", m => ((char)('a' + m.Value.Length - 1)).ToString());
- return comp;
- }
- Console.WriteLine("Сжатая последовательность: " + comp);
- // Задача №3 (Стрелки):
- using System.Text.RegularExpressions;
- Console.WriteLine("Введите стрелы: ");
- string strel = Console.ReadLine();
- string patt = @"(>>-->)|(<--<<)";
- MatchCollection match = Regex.Matches(strel, patt);
-
- Console.WriteLine("Количество стрел: " + match.Count);
- //Задача №4 (Нумеролог):
-
- Console.WriteLine("Введите время жизни человека в секундах: ");
- string voi = Console.ReadLine();
- int count = 0;
- while (voi.Length > 1)
- {
- int sum = voi.Sum(c => c - '0');
- count++;
- Console.WriteLine($"Промежуточная сумма на шаге {count}: {sum}");
- voi = sum.ToString();
- }
- Console.WriteLine($"Количество операций: {count}");
- Console.WriteLine($"Полученная цифра: {voi}");
- // Задача №5 (Перестановка):
- using System.Text.RegularExpressions;
- Console.WriteLine("Введите два слова: ");
- string name1 = Console.ReadLine();
- string name2 = Console.ReadLine();
- name1 = Regex.Replace(name1.ToLower(), @"\s+", "");
- name2 = Regex.Replace(name2.ToLower(), @"\s+", "");
- char[] name1Chars = name1.ToCharArray();
- Array.Sort(name1Chars);
- string sortedName1 = new string(name1Chars);
- char[] name2Chars = name2.ToCharArray();
- Array.Sort(name2Chars);
- string sortedName2 = new string(name2Chars);
- if (sortedName1.Equals(sortedName2))
- {
- Console.WriteLine("Из одного имени можно получить другое.");
- }
- else
- {
- Console.WriteLine("Из одного имени нельзя получить другое.");
- }
|