Нема описа

akapralov 666107efeb lab пре 10 месеци
.idea 666107efeb lab пре 10 месеци
kapralov14 666107efeb lab пре 10 месеци
README.md 666107efeb lab пре 10 месеци
kapralov14.sln 666107efeb lab пре 10 месеци

README.md

Регулярные выражения

Пример регулярки в С

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();
}

Вывод:

Match1
Group 1='One'
Group 2='car'
Match2       
Group 1='red'
Group 2='car'
Match3
Group 1='blue'
Group 2='car'

Проверка на соответствие строки формату

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);

Задание на дом:

  1. Лабораторную по теме "строки" реализовать через регулярки (где это возможно)

    Задача №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("Из одного имени нельзя получить другое.");
}