Главная страница
Навигация по странице:

  • Метасимволы в регулярных выражениях C

  • Символ Значение Пример

  • Возможности регулярных выражений C

  • Использование метода IsMatch ()

  • Использование метода Match()

  • Использование метода Replace()

  • Символ Описание Пример шаблона Пример шаблона замены

  • Использование метода Split()

  • Использование метода Matches()

  • Параметры регулярных выражений

  • Регулярные выражения в C#. ООП Реферат Васькина Д.Д. БИВТ-21-5. Реферат по дисциплине Объектноориентированное программирование


    Скачать 55.08 Kb.
    НазваниеРеферат по дисциплине Объектноориентированное программирование
    АнкорРегулярные выражения в C
    Дата30.09.2022
    Размер55.08 Kb.
    Формат файлаdocx
    Имя файлаООП Реферат Васькина Д.Д. БИВТ-21-5.docx
    ТипРеферат
    #706898

    Министерство науки и высшего образования РФ
    ФГАОУ ВПО

    Национальный исследовательский технологический университет «МИСиС»
    Институт Информационных технологий и компьютерных наук (ИТКН)
    Кафедра Инфокоммуникационных технологий (ИКТ)

    Реферат

    по дисциплине «Объектно-ориентированное программирование»

    на тему «Регулярные выражения в C#»
    Выполнил:
    студент группы БИВТ-21-5

    Васькина Д.Д.

    Проверил:
    Стучилин В.В,
    Москва, 2022

    Содержание


    Введение 3

    1Знакомство с регулярными выражениями 4

    2Метасимволы в регулярных выражениях C# 4

    3Возможности регулярных выражений C# 6

    3.1Использование метода IsMatch() 7

    3.2Использование метода Match() 7

    3.3Использование метода Replace() 8

    3.4Использование метода Split() 9

    3.5Использование метода Matches() 9

    4Параметры регулярных выражений 10

    Заключение 12

    Список использованной литературы 13

    Введение

    В последнее время с огромной скоростью развиваются информационные технологии, а также становятся популярными различные методы, способы, механизмы и инструменты, которые помогают оптимизировать работу программистов. Одним из таких методов, для обработки текстовой информации, являются регулярные выражения (от англ. Regular Expression). С помощью данного инструмента можно эффективно выполнять различные задачи, такие как, например: удалить повторяющиеся слова в строке, сделать заглавными первые буквы всех слов, выделить из текста все номера телефонов, электронные адреса или же имена компьютеров и многое другое. Применение регулярных выражений позволяет сэкономить массу времени и сил.

    Целью реферата является изучение теоретических и практических задач, решаемых с помощью регулярных выражений на языке программирования C#.

    Реализация данной цели обусловила необходимость решения следующих задач:

    1. Изучить язык регулярных выражений для C#;

    2. Рассмотреть механизмы реализации регулярных выражений;

    3. Выделить классы задач, решаемые с помощью регулярных выражений.

    Регулярные выражения — это чрезвычайно важная часть деятельности программиста и полезный инструмент в рабочем арсенале.


    1. Знакомство с регулярными выражениями

    Регулярные выражения — это часть небольшой технологической области, невероятно широко используемой в огромном диапазоне программ. Регулярные выражения можно представить себе как мини-язык программирования, имеющий одно специфическое назначение: находить подстроки в больших строковых выражениях. Регулярное выражение в C#, также известное как regex или regexp, представляет собой последовательность символов, определяющих шаблон. Такой шаблон может состоять из литералов, чисел, символов или конструкций. Язык регулярных выражений предназначен специально для обработки строк. Он включает два средства: [2]

    1. Набор управляющих кодов для идентификации специфических типов символов

    2. Система для группирования частей подстрок и промежуточных результатов таких действий

    С помощью регулярных выражений можно выполнять достаточно сложные и высокоуровневые действия над строками:

    1. Идентифицировать все повторяющиеся слова в строке

    2. Сделать заглавными первые буквы всех слов

    3. Преобразовать первые буквы всех слов длиннее трех символов в заглавные

    4. Обеспечить правильную капитализацию предложений

    5. Выделить различные элементы в URI. [2]

    1. Метасимволы в регулярных выражениях C#

    Главным преимуществом регулярных выражений является использование метасимволов — специальные символы, задающие команды, а также управляющие последовательности, которые работают подобно управляющим последовательностям C#. Это символы, предваренные знаком обратного слеша (\) и имеющие специальное назначение. [2]

    Таблица 1 Метасимволы, используемые в регулярных выражениях

    Символ

    Значение

    Пример

    1

    2

    3

    […]

    Обозначает отдельные символы и диапазоны значений для сопоставления.

    [xyz] соответствует строкам, содержащим x, y или z.

    ^

    Сопоставление начальных символов, находящихся в начале выражения. При размещении в скобках с последующими символами, выполняется отрицание этих символов.

    ^[xyz] находит строки, начинающиеся с x, y или z. [^abc] находит строки, не содержащие любые комбинации a, b и c. Находятся строки, содержащие bat и bar, но не cab.

    Продолжение таблицы 1

    1

    2

    3

    .

    Сопоставление отдельных символов.

    x.y.z соответствует строке x1y0z или xaybz

    (…)

    Содержит группу выражений и значений.




    \

    Разрешает использование метасимвола как значимого символа.

    \+ позволяет использовать знак + для распознавания.

    \a

    Любые буквенно-цифровые символы (a–zA–Z0–9)




    \b

    Пробел




    \c

    Любые буквенные символы (a–zA–Z)




    \d

    Любая цифра (0–9)




    \h

    Любое шестнадцатеричное число




    \n

    Новая строка




    \q

    Строка в кавычках




    \w

    Простое слово ([a–zA–Z]+)




    \z

    Целое число ([0–9]+)




    В регулярных выражениях также используются повторители – это специальные метасимволы, которые располагаются сразу после обычного символа (группы символов) и задают количество его повторений в выражении. [2]

    Таблица 2 – Повторители, используемые в регулярных выражениях

    Символ

    Значение

    Пример

    1

    2

    3

    +

    Предшествующие символы или диапазоны значений могут сопоставляться один или несколько раз.

    Эквивалентно {1,}

    ?

    Предшествующие символы или диапазоны значений могут сопоставляться ноль раз или один раз.

    Эквивалентно {0, 1}

    *

    Предшествующие символы или диапазоны значений могут сопоставляться ноль раз или несколько раз.

    Эквивалентно {0,}

    {n, m}

    Соответствует предшествующему шаблону, повторенному не менее n и не более m раз

    s{2,4}

    {n,}

    Соответствует предшествующему шаблону, повторенному n или более раз

    s{1,}

    {n}

    Соответствует в точности n экземплярам предшествующего шаблона

    s{2}

    Регулярное выражение записывается в виде строкового литерала, перед строкой необходимо ставить символ @. Его можно не ставить, если в качестве шаблона используется шаблон без метасимволов. Пример: слово rus - @"rus" или "rus". [4]

    Примеры регулярных выражений:

    1. Время в формате ЧЧ:ММ:СС: @"([01]d|2[0-3])(:[0-5]d){2}$"

    2. Номер телефона в формате +7xxx-xxx-xx-xx: @"+7d{3}-d{3}(-dd){2}"

    3. Дата рождения в формате ДД.ММ.ГГГГ или ДД/ММ/ГГГГ: @"(0[1-9] | [12][0-9] | [3][01]) [/.] (0[1-9] | 1[0-2]) [/.] (19|20)dd"

    4. Номер автомобиля в формате xYYYxx, где x – буква, y – цифра: @"[АВЕКМНОРСТХУ]ddd[АВЕКМНОРСТХУ]{3}"

    5. Адрес электронной почты: @"bw+([.w]+)*w@w((.w)*w+)*.w{2,3}b"

    Если нужно найти какой-то символ, который является метасимволом (например, точка), можно это сделать защитив её обратным слешем. Т.е. просто точка означает любой одиночный символ, а \. означает просто точку.

    1. Возможности регулярных выражений C#

    Регулярные выражения имеют большой спектр применения и можно выделить следующие возможности и особенности: [5]

    1. Сравнение с шаблоном: регулярные выражения отлично помогают определять, соответствует ли строка тому или иному формату – например, телефонному номеру, адресу электронной почты или номеру кредитной карты.

    2. Замена: при помощь регулярных выражений легко находить и заменять шаблоны в строке.

    3. Извлечение: при помощи регулярных выражений легко извлекать из шаблона фрагменты информации.

    4. Портируемость: почти в любом распространённом языке программирования есть своя библиотека регулярных выражений. Синтаксис в основном стандартизирован, поэтому вам не придется переучиваться регулярным выражениям при переходе на новый язык. [5]

    Все основные методы класса Regex реализованы в двух вариантах: статическом и экземплярном; при этом каждый из вариантов реализован для нескольких наборов параметров. Имеется шесть основных методов: [6]

    1. IsMatch (типа bool) - возвращает True, если требуемое выражение найдено, и False в противном случае;

    2. Match (типа Match) - возвращает первое найденное выражение; 

    3. Matches (типа MatchCollection) - возвращает все найденные выражения; 

    4. Split (типа string[]) - разбивает строку на фрагменты; разделители фрагментов определяются регулярным выражением; 

    5. Replace (типа string) - заменяет найденные выражения. [6]

    Примеры методов приведены в следующих пунктах.

    1. Использование метода IsMatch()

    Для проверки того, подходит ли строка под регулярное выражение используется метод Regex.IsMatch(), возвращающий True, если текст подходит под регулярное выражение и False если нет. [1]

    В следующем примере определяется регулярное выражение, которое соответствует номеру телефона в формате +xxxx-xxx-xx-xx.

    Код программы:

    staticvoidMain(string[] args)

    {

    string[] str = { "+79-005553535", "89005553535", "+7-900-555-35-35", "+79005553535", "+7900-555-35-35" };

    //Входные строки для сопоставления с действительным номером мобильного телефона.

    foreach (stringsinstr)

    {

    boolmatch = Regex.IsMatch(s, @"\+[7]\d{3}-\d{3}-\d{2}-\d{2}");

    //Неизменное регулярное выражение

    Console.WriteLine("{0} is a mobile number {1}", s, match);

    }

    }

    Вывод программы:

    +79-005553535 is a mobile number False

    89005553535 is a mobile number False

    +7-900-555-35-35 is a mobile number False

    +79005553535 is a mobile number False

    +7900-555-35-35 is a mobile number True

    1. Использование метода Match()

    Находит во входной строке подстроку, совпадающую с шаблоном регулярного выражения, и возвращает первое вхождение в качестве единого объекта Match. [1]

    В следующем примере определяется регулярное выражение, которое соответствует словам, начинающимся с буквы "a".

    Код программы:

    static void Main(string[] args)

    {

    string pattern = @"\b[t]\w+";

    //Неизменноерегулярноевыражение

    string input = " In science, the importance is something that has been reached out, not the researcherhimself ";

    //Входнаястрока

    Match m = Regex.Match(input, pattern);

    if (m.Success)

    Console.WriteLine("Found '{0}' at position {1}.", m.Value, m.Index);

    }

    Вывод программы:

    Found 'the' at position 13.

    1. Использование метода Replace()

    Метод Regex.Replace() производит замену одной подстроки другой. [1]

    В следующей таблице показано, как формируются метасимволы для замены:

    Таблица 3 - Метасимволы замены

    Символ

    Описание

    Пример шаблона

    Пример шаблона замены

    Результат

    1

    2

    3

    4

    5

    $ number

    Замещает часть строки, соответствующей группе number

    \b(\w+)(\s) (\w+)\b

    $3$2$1

    “один два” => “два один”

    $$

    Подставляет литерал “$”

    \b(\d+)\s?USD

    $$$1

    “103 USD” => “$103”

    $&

    Замещает копией полного соответствия

    (\$*(\d*(\.+\d+)?){1})

    **$&

    “$103” => “**$103**”

    $`

    Замещает весь текст входной строки до соответствия

    B+

    $`

    “AABBCC” => “AAAACC”

    $’

    Замещает весь текст входной строки после соответствия

    B+

    $’

    “AABBCC” => “AACCCC”

    $+

    Замещает последнюю захваченную группу

    B+(C+)

    $+

    “AABBCCDD” => “AACCDD”

    $_

    Замещает всю входную строку

    B+

    $_

    “AABBCC” => “AAAABBCCCC”

    В следующем примере выполняется поиск слова «руб» в строке с заменой его на символ «$».

    Код программы:

    static void Main(string[] args)

    {

    string input = "Добро пожаловать в наш магазин, вот наши цены: \n" +

    "\t 1 кг. яблок - 20 руб. \n" +

    "\t 2 кг. апельсинов - 30 руб. \n";

    // В шаблоне используются 2 группы

    string pattern = @"\b(\d+)\W?(руб.)";

    // Строказамены "руб." на "$"

    string replacement = "$$$1";

    input = Regex.Replace(input, pattern, replacement);

    Console.WriteLine(input);

    }

    Вывод программы:

    Добро пожаловать в наш магазин, вот наши цены:

    1 кг. яблок - $20

    2 кг. апельсинов - $30

    1. Использование метода Split()

    Для разбиения строки на части используется метод Regex.Split(), который возвращает массив строк (string[]) с частями исходной строки. [1]

    В следующем примере шаблон регулярного выражения используется [0-9]+ для разделения входной строки на цифры.

    Код программы:

    static void Main(string[] args)

    {

    string input = "Hello123,45World6789!";

    //Входнаястрока.

    String pattern = "[0-9]+";

    //Неизменноерегулярноевыражение

    String[] split = Regex.Split(input, pattern);

    for (int i = 0; i < split.Length; i++)

    {

    Console.Write("{0}", split[i]);

    if (i < split.Length - 1)

    Console.Write(" ");

    }

    }

    Вывод программы:

    Hello , World !

    1. Использование метода Matches()

    Для поиска совпадений используется метод Regex.Matches(). Этот метод возвращает массив класса MatchCollection, содержащий найденные совпадения и ряд другой информации. Доступ к найденному тексту производится с помощью конструкции match[i].Value. Получить количество найденных совпадений можно из свойства match.Count. [2]

    В следующем примере шаблон регулярного выражения используется для поиска символа «M».

    Код программы:

    static void Main(string[] args)

    {

    string pattern = @"\b[t]\w+";

    //Неизменное регулярное выражение

    Regex rg = new Regex(pattern);

    //Новыйэкземпляр Regex

    string person = "In science, the importance is something that has been reached out, not the researcherhimself";

    //Входнаястрока

    MatchCollection matches = rg.Matches(person);

    for (int i = 0; i < matches.Count; i++)

    {

    Console.WriteLine(matches[i].Value);

    }

    }

    Вывод программы:

    the

    that

    the

    1. Параметры регулярных выражений

    По умолчанию при сравнении входной строки с любыми литералами в шаблоне регулярного выражения учитывается регистр, пробел в шаблоне интерпретируется как литерал, а захватываемые группы в регулярном выражении именуются как явно, так и неявно. Вы можете изменить эти и некоторые другие аспекты поведения регулярного выражения по умолчанию с помощью параметров регулярного выражения. Эти параметры могут быть указаны как часть шаблона регулярного выражения или переданы конструктору класса Regex или статичному методу сопоставления шаблона как значение перечисления RegexOptions. [7]

    В следующей таблице показана часть информации о перечислении RegexOptions.

    Таблица 4 - Структура перечисления RegexOptions

    Член

    Описание

    1

    2

    IgnoreCase

    Игнорирует регистр символов во входной строке

    IgnorePatternWhitespace

    Удаляет из строки не защищенные управляющими символами пробелы и разрешает комментарии, начинающие со знака фунта или хэша

    Продолжение таблицы 4

    1

    2

    ExplicitCapture

    Модифицирует способ поиска соответствия, обеспечивая только буквальное соответствие

    CultureInvariant

    Предписывает игнорировать национальные установки строки

    Multiline

    Изменяет значение символов ^ и $ так, что они применяются к началу и концу каждой строки, а не только к началу и концу всего входного текста

    RightToLeft

    Предписывает читать входную строку справа налево вместо направления по умолчанию – слева направо

    Singleline

    Специфирует однострочный режим, в которой точка (.) символизирует соответствие любому символу

    После создания шаблона регулярного выражения с ним можно осуществить различные действия, в зависимости от того, что вам необходимо. [7]

    Заключение

    В заключении можно отметить, что регулярные выражения – очень полезный механизм для работы с текстом, который довольно часто используется на практике.

    Выполнены все поставленные задачи. В ходе выполнения работы были изучены принципы работы с регулярными выражениями, различные методы и метасимволы, присутствующие в регулярных выражениях в языке программирования C#. Были приведены примеры их использования.

    Список использованной литературы

    1. Руководство «Регулярные выражения C#». [Электронный ресурс] URL: https://betacode.net (Дата обращения: 28.03.2022)

    2. Регулярные выражения в C#. [Электронный ресурс] URL: https://professorweb.ru (Дата обращения 28.03.2022)

    3. Регулярные выражения .NET Framework [Электронный ресурс] URL: https://docs.microsoft.com/ru (Дата обращения 28.03.2022)

    4. Регулярные выражения [Электронный ресурс] URL: Регулярные выражения.docx?forcedownload=1 (yandex.ru) (Дата обращения 13.04.2022)

    5. Регулярные выражения [Электронный ресурс] URL: https://docs.yandex.ru (Дата обращения 13.04.2022)

    6. Язык программирования C# [Электронный ресурс] URL: http://edu.mmcs.sfedu.ru (Дата обращения 13.04.2022)

    7. Параметры регулярных выражений [Электронный ресурс] URL: https://docs.microsoft.com/ru (Дата обращения 13.04.2022)



    написать администратору сайта