41768

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

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

Информатика, кибернетика и программирование

Контрольные вопросы: Для чего используются регулярные выражения Для чего используются конструкции группирования и обратных ссылок Для чего используется класс Regex Пояснения и примеры: Регулярные выражения предназначены для обработки текстовой информации и обеспечивают: эффективный поиск в тексте по заданному шаблону; редактирование замену и удаление подстрок; формирование итоговых отчетов по результатам работы с текстом.NET для работы с регулярными выражениями объединены в пространство имен System. Для описания регулярного...

Русский

2013-10-25

492.02 KB

7 чел.

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

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

Цель работы:

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

Задачи:

  1.  Реализовать решение задания своего варианта с использованием методов класса Regex;
  2.  Выполнить требования к лабораторным работам (см.файл «Требования к лабораторным»);
  3.  Ознакомиться с литературой по теме лабораторной работы;
  4.  Ответить на контрольные вопросы.

Контрольные вопросы:

  1.  Для чего используются регулярные выражения?
  2.  Для чего используются конструкции группирования и обратных ссылок?
  3.  Для чего используется класс Regex?

Пояснения и примеры:

Регулярные выражения предназначены для обработки текстовой информации и обеспечивают:

  1.  эффективный поиск в тексте по заданному шаблону;
  2.  редактирование, замену и удаление подстрок;
  3.  формирование итоговых отчетов по результатам работы с текстом.

Регулярное выражение — это шаблон (образец), по которому выполняется поиск соответствующего ему фрагмента текста. Язык описания регулярных выражений состоит из символов двух видов: обычных и метасимволов. Обычный символ представляет в выражении сам себя, а метасимвол — некоторый класс символов, например любую цифру или букву.

Классы библиотеки .NET для работы с регулярными выражениями объединены в пространство имен System.Text.RegularExpressions. Класс Regex представляет собственно регулярное выражение. Класс является неизменяемым, то есть после создания экземпляра его корректировка не допускается. Для описания регулярного выражения в классе определено несколько перегруженных конструкторов:

  1.  Regex() — создает пустое выражение;
  2.  Regex(String) — создает заданное выражение;
  3.  Regex(String, RegexOptions) — создает заданное выражение и задает параметры для его обработки с помощью элементов перечисления RegexOptions (например, различать или не различать прописные и строчные буквы).

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

Regex гх = new Regex( @"\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.IgnoreCase );

Поиск фрагментов строки, соответствующих заданному выражению, выполняется с помощью методов IsMatch, Match и Matches.

Метод IsMatch возвращает true, если фрагмент, соответствующий выражению в заданной строке найден, и false в противном случае.

Метод Match класса Regex, в отличие от метода IsMatch, не просто определяет, произошло ли совпадение, а возвращает объект класса Match — очередной фрагмент, совпавший с образцом.

Метод Matches класса Regex возвращает объект класса MatchCollection — коллекцию всех фрагментов заданной строки, совпавших с образцом.

Метод Split класса Regex разбивает заданную строку на фрагменты в соответствии с разделителями, заданными с помощью регулярного выражения, и возвращает эти фрагменты в массиве строк.

Метод Replace класса Regex позволяет выполнять замену фрагментов текста.

Примеры использования:

Пример 1. Замена подстрок

Предположим, список рассылки содержит записи, в которых, помимо имени и фамилии, может указываться обращение ("Mr.", "Mrs.", "Miss" или "Ms."). Если при создании меток для конвертов по такому списку указывать обращение не требуется, можно использовать для удаления обращений регулярное выражение, как показано в следующем примере.

using System;

using System.Text.RegularExpressions;

public class Example

{

  public static void Main()

  {

     string pattern = "(Mr\\.? |Mrs\\.? |Miss |Ms\\.? )";

     string[] names = { "Mr. Henry Hunt", "Ms. Sara Samuels",

                        "Abraham Adams", "Ms. Nicole Norris" };

     foreach (string name in names)

        Console.WriteLine(Regex.Replace(name, pattern, String.Empty));

  }

}

// The example displays the following output:

//    Henry Hunt

//    Sara Samuels

//    Abraham Adams

//    Nicole Norris

Шаблон регулярного выражения (Mr\.? |Mrs\.? |Miss |Ms\.? ) совпадает с любым вхождением "Mr ", "Mr. " , "Mrs ", "Mrs. " , "Miss ", "Ms или "Ms. " . Вызов метода Regex.Replaceприведет к замене найденных при сопоставлении подстрок на String.Empty; другими словами, найденная подстрока удаляется из исходной строки.

Пример 2. Определение повторяющихся слов

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

using System;

using System.Text.RegularExpressions;

public class Class1

{

  public static void Main()

  {

     string pattern = @"\b(\w+?)\s\1\b";

     string input = "This this is a nice day. What about this? This tastes good. I saw a a dog.";

     foreach (Match match in Regex.Matches(input, pattern, RegexOptions.IgnoreCase))

        Console.WriteLine("{0} (duplicates '{1})' at position {2}",

                          match.Value, match.Groups[1].Value, match.Index);

  }

}

// The example displays the following output:

//       This this (duplicates 'This)' at position 0

//       a a (duplicates 'a)' at position 66

Конструкции группирования отображают части выражений регулярных выражений и захватывают части строки входной строки.

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

(часть_выражения)

где часть выражения — это любой допустимый шаблон регулярного выражения. Записывает, что использование скобок нумеруется автоматически слева направо, основываясь на порядке открывающих скобок в регулярном выражении, начиная с 1. Захват с номером 0 – это текст, соответствующий всему шаблону регулярного выражения.

Можно получить доступ к группам записи следующими способами:

  1.  С помощью конструкции обратной ссылки в регулярном выражении. Для ссылки на соответствующую часть выражения в том же регулярном выражении используется синтаксис \номер, где номер – это порядковый номер захваченной части выражения.
  2.  С помощью конструкции именованной обратной ссылки в регулярном выражении. Для ссылки на соответствующую часть выражения в том же регулярном выражении используется синтаксис \k<номер>, где номер – это порядковый номер захваченной части выражения. Захваченная часть выражения получает имя по умолчанию, идентичное ее порядковому номеру. Дополнительные сведения см. в разделе Именованные соответствующие части выражений.

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

using System;

using System.Text.RegularExpressions;

public class Example

{

  public static void Main()

  {

     string pattern = @"(\w+)\s(\1)";

     string input = "He said that that was the the correct answer.";

     foreach (Match match in Regex.Matches(input, pattern, RegexOptions.IgnoreCase))

        Console.WriteLine("Duplicate '{0}' found at positions {1} and {2}.",

                          match.Groups[1].Value, match.Groups[1].Index, match.Groups[2].Index);

  }

}

// The example displays the following output:

//       Duplicate 'that' found at positions 8 and 13.

//       Duplicate 'the' found at positions 22 and 26.

Шаблон регулярного выражения определяется следующим образом:

(\w+)\s(\1)\W

В следующей таблице показано, как интерпретируется шаблон регулярного выражения.

Шаблон

Описание

(\w+)

Совпадение с одним или несколькими символами слова. Это первая группа записи.

\s

Соответствует пробелу.

(\1)

Сопоставить строку в первой захваченной группе. Это вторая группа записи. В примере эта группа назначается захваченной группе, так что начальная позиция повторяющегося слова может быть получена из свойства Match.Index.

\W

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

Литература:

  1.  Павловская Т.А. С#. Регулярные выражения 355 – 365 стр.;
  2.  статья «Объектная модель регулярных выражений»;
  3.  C# - лекции IntUit (Биллиг В.А.). Лекция 15: Регулярные выражения.
  4.  http://regexpres.narod.ru/calculator.html - конструктор регулярных выражений

 

А также другие работы, которые могут Вас заинтересовать

64905. Мультигармонічні плазмо-пучкові супергетеродинні лазери на вільних електронах 668 KB
  Серед можливих конструкцій супергетеродинних лазерів на вільних електронах які найбільш перспективні для практичної реалізації необхідно виділити двопотокові та плазмопучкові ЛВЕ. Незважаючи на те що саме плазмопучкова версія супергетеродинного ЛВЕ була запропонована першою основний розвиток...
64906. БАНКІВСЬКЕ КРЕДИТУВАННЯ ЕКСПОРТНОЇ ДІЯЛЬНОСТІ ПІДПРИЄМСТВ В УКРАЇНІ 258 KB
  У свою чергу умови кредитування є одним із чинників конкурентної боротьби окремих підприємств і держав у цілому на міжнародних ринках збуту оскільки кредит так само як ціна або якість продукції розширює можливості експортера щодо збуту а імпортера щодо придбання товарів та послуг.
64907. ПІДВИЩЕННЯ ЕФЕКТИВНОСТІ ВИГОТОВЛЕННЯ ЗОВНІШНІХ НАПІВКРУГЛИХ ШЛІЦЬОВИХ КАНАВОК У ВАЛАХ ТА НАПРАВЛЯЮЧИХ 170 KB
  Для досягнення поставленої мети в роботі розв’язуються такі задачі: провести аналіз конструкцій і технологій виготовлення шліцьових валів і направляючих з аналізом їх на технологічність щодо виготовлення ремонтопридатності й експлуатаційної надійності та довговічності...
64908. АДМІНІСТРАТИВНІ ПРОЦЕДУРИ ПРОХОДЖЕННЯ СЛУЖБИ В ОРГАНАХ ВНУТРІШНІХ СПРАВ 178 KB
  Становлення правової держави в Україні вимагає реального утвердження принципу верховенства права, зміцнення законності та правопорядку в країні, забезпечення прав і свобод громадян. Вирішення цього завдання, з одного боку, потребує посилення правоохоронної функції держави...
64909. АДМІНІСТРАТИВНО-ПРАВОВЕ РЕГУЛЮВАННЯ У СФЕРІ ЖИТЛОВО-КОМУНАЛЬНОГО ГОСПОДАРСТВА УКРАЇНИ В СУЧАСНИХ УМОВАХ 136 KB
  Розбудова правової держави в Україні та формування ринкових відносин потребують удосконалення роботи усіх державних органів в тому числі й тих що діють у сфері житловокомунального господарства ЖКГ. Наразі в Україні здійснюється велика робота щодо створення сучасної системи управління...
64910. Теоретико-методологічні засади адміністративно-територіальної організації України 452.5 KB
  Адміністративно-територіальний устрій безпосередньо впливає на результативність та ефективність державного управління територіальними системами. Зокрема це стосується обґрунтування класифікації адміністративно-територіальних структур за еволюційними формами поділ устрій та організація оскільки демократизація...
64911. СТРАТЕГІЇ ФОРМУВАННЯ ІМІДЖУ ПОЛІТИЧНОГО ЛІДЕРА: РЕГІОНАЛЬНИЙ ВИМІР 139 KB
  Дослідження проблеми формування іміджу політичного лідера регіонального рівня складає одне із найбільш актуальних та важливих завдань сучасної політичної теорії та практики. У сучасних умовах регіональне політичне лідерство стає одним із головних чинників політичного розвитку справжньої демократизації політичних відносин.
64912. МЕТАФОРА І МЕТОНІМІЯ ЯК ЧИННИКИ ТВОРЕННЯ ТА РОЗВИТКУ УКРАЇНСЬКОЇ ТЕХНІЧНОЇ ТЕРМІНОЛОГІЇ 180.5 KB
  Актуальність дослідження зумовлена: 1 відсутністю в українському мовознавстві монографічних досліджень метафори й метонімії як чинників творення та розвитку сучасних українських технічних термінів; 2 потребою виявити та схарактеризувати семантичні процеси в сучасній технічній термінології української мови...
64913. Мікроплазмове напилення з використанням дротових матеріалів 1.85 MB
  Таким чином створення способу МПН з використанням дроту що забезпечує можливість уникнути зазначених недоліків є актуальним і являє собою наступний етап розвитку цієї технології. Технологічний процес розпилення дроту плазмовим струменем з метою отримання сфероідізованих порошків металу почав...