Ingen beskrivning

vivanov 70a7ac5655 first commit 10 månader sedan
.gitignore.txt 429e5ab52f first commit 11 månader sedan
readme.md 70a7ac5655 first commit 10 månader sedan

readme.md

Лабораторная работа №12

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

Регулярки в C#

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

Вывод:

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

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 usl = @"^[+]{1}[7]{1}[0-9]{3}[0-9]{3}[0-9]{2}[0-9]{2}$";
Console.Write("input your RU number: ");
string input = Console.ReadLine();
Regex number = new Regex(usl);
while (true)
{
    if (number.IsMatch(input))
    {
        Console.WriteLine("your number is true!");
    }
    else
    {
        Console.WriteLine("your number is fake!!!!!!");
    }
    break;
}

Тут я немного сглупил, ведь мог использовать \d и не расписывать условие для цифр от 0 до 9 в квадратных скобках.

Вывод:

input your RU number: +79025431234
your number is true!

Пример с эмайлом

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

Вывод:

Введите адрес электронной почты
thestrongest123gmail.com
Некорректный email             
Введите адрес электронной почты
thestrongest123@gmail.com 
Email подтвержден

Пример с заменой

using System.Text.RegularExpressions;

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

Вывод:

Мама---->мыла---->раму.

Решение прошлых заданий данным методом

Домашнее задание со строками я сразу решал таким способом. О данном способе я узнал чуть раньше этого занятия. Так что я просто продублирую свои коды с той лабы сюда.

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

using System.Text.RegularExpressions;

string bukvi = @"^[A-Z]{1}\d{3}[A-Z]{2}$";
Regex check = new Regex(bukvi);
Console.WriteLine();
string input = Console.ReadLine();
while (true)
{
    if (check.IsMatch(input))
    {
        Console.WriteLine("True");
        break;
    }
    else
    {
        Console.WriteLine("False");
        break;
    }
}

Стрелки

using System.Text.RegularExpressions;

string arrow1 = ">>-->";
string arrow2 = "<--<<";
Regex check1 = new Regex(arrow1);
Regex check2 = new Regex(arrow2);
string input = Console.ReadLine();
while (true)
{
    if (check1.IsMatch(input))
    {
        Console.WriteLine("True");
        break;
    }
    else if (check2.IsMatch(input))
    {
        Console.WriteLine("True");
        break;
    }
    else
    {
        Console.WriteLine("False");
        break;
    }
}