Нет описания

ababin dba619a6c0 Обновить 'README.md' 6 месяцев назад
.idea 1d81d3c1a7 lab 6 месяцев назад
ConsoleApp18 1d81d3c1a7 lab 6 месяцев назад
ConsoleApp18.sln 1d81d3c1a7 lab 6 месяцев назад
README.md dba619a6c0 Обновить 'README.md' 6 месяцев назад

README.md

регулярки в C

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("Совпадений не найдено");
}

Вывод:

тупогуб
тупогубенький
тупа

Поиск с группами

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

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

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

Вывод:

введите адрес электронной почты
hardbad62@gmail.com
email подтвержден

Замена и метод Replace Класс Regex имеет метод Replace, который позволяет заменить строку, соответствующую регулярному выражению, другой строкой:

string s = "Мама  мыла  раму. ";
string pattern = @"\s+";
string target = " ";
Regex regex = new Regex(pattern);
string result = regex.Replace(s, target);

Номера автобусов

using System.Text.RegularExpressions;

string num = @"^[A-Z]{1}\d{3}[A-Z]{2}$";

Console.WriteLine("Введите номер:");

while (true)
{
    string input = Console.ReadLine();
    if (string.IsNullOrEmpty(input))
    {
        break;
    }

    if (Regex.IsMatch(input, num))
    {
        Console.WriteLine("Номер соответствует стандарту.");
    }
    else
    {
        Console.WriteLine("Номер не соответствует стандарту.");
    }
}   

Сжатие бинарных последовательностей

using System.Text.RegularExpressions;

static void Main()
{
    string binary = "0000000000000000000000000101010101001010101";

    string compressedSequence = CompressBinary(binary);
        
    Console.WriteLine("Сжатая последовательность: " + compressedSequence);
}

static string CompressBinary(string binarySequence)
{
    string compressedSequence = Regex.Replace(binarySequence, "1+|0+", 
        m => ((char)('a' + m.Length - 1)).ToString());

    return compressedSequence;
}

Стрелки

using System.Text.RegularExpressions;

Console.WriteLine("Введите стрелы: ");
string s = Console.ReadLine();
string p = @"(>>-->)|(<--<<)";

MatchCollection match = Regex.Matches(s, p);
        
Console.WriteLine("Количество стрел: " + match.Count);

Перестановка

using System.Text.RegularExpressions;

Console.WriteLine("Введите два слова: ");
string a = Console.ReadLine();
string b = Console.ReadLine();

a = Regex.Replace(a.ToLower(), @"\s+", "");
b = Regex.Replace(b.ToLower(), @"\s+", "");

char[] aChar = a.ToCharArray();
Array.Sort(aChar);
string aSorted = new string(aChar);

char[] bChar = b.ToCharArray();
Array.Sort(bChar);
string bSorted = new string(bChar);

if (aSorted.Equals(bSorted))
{
    Console.WriteLine("Из одного имени можно получить другое.");
}
else
{
    Console.WriteLine("Из одного имени нельзя получить другое.");
}