41768

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

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

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

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

Русский

2013-10-25

492.02 KB

6 чел.

Лабораторная работа № 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 - конструктор регулярных выражений

 

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

50770. Использование динамических переменных 27.5 KB
  Цель: Научиться использовать переменные разных типов. Задание 1. Создадим первую типовую программу на PHP
50771. Программирование циклов в РНР 31.5 KB
  Цель: Научиться использовать различные циклы. Задание 1. Проверить работоспособность кода программ из 3 примеров.
50772. Работа с массивами РНР 25.5 KB
  Цель: Научиться использовать массивы при написании программ. Разобрать особенности каждого вида массивов. Задание 1. Создать массив A 1-10 из десяти целых чисел.
50773. Работа с датой и временем 25 KB
  Цель: Научиться работать с датой и временем. Разобрать основные функции даты и времени. Задание 1. Проработать фрагменты кода из теоритической части. Задание 2. Вывести дату и время в различных форматах. Задание 3. Вывести дату и время на другой странице при помощи форм.
50774. Разработка макета динамических страниц 30 KB
  С страницу следующего примерного содержания Заголовок сайта Навигация Страница1 Страница2 Страница3 Содержание страницы 1 Информация об авторе...
50775. Использование метода GET 28 KB
  Создать форму и результат передачи методом GET поместить в тот же файл. Создать форму. Поместить на нее 4 текстовых поля(Фамилию, Имя, Отчество, Группу). Передать значения этих полей другому файлу. Поместить на форму стандартные кнопки, проверить работу данных кнопок.
50776. Передача данных методом POST 25.5 KB
  Получить данные при помощи метода POST. Создать форму для ввода Фамилии, Имени, Отчества, Группы. Получить данные при помощи метода POST.Расположить в одной webстранице 2 формы с методом Get и Post.
50777. Разработка страниц с формами 32 KB
  Цель: Научиться создавать формы содержащие различные элементы. Задание 1. Создать форму содержащую 10 различных элементов.