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

 

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

86097. Анализ и диагностика финансовых результатов и оценка имущественного состояния предприятия транспорта 689.5 KB
  Финансовый анализ представляет собой процесс, основанный на изучении данных о финансовом состоянии предприятия и результатов его деятельности в прошлом с целью оценки будущих условий и результатах его деятельности. Таким образом, главной задачей финансового анализа является снижение неизбежной неопределенности, связанной с принятием экономических решений, ориентированных в будущее.
86098. Причины и последствия мирового экономического кризиса 563.5 KB
  Его непосредственным предшественником был ипотечный кризис в США первые признаки которого появились в 2006 году в форме снижения числа продаж домов и в начале 2007 года переросли в кризис высокорисковых ипотечных кредитов subprime. Постепенно кризис из ипотечного стал трансформироваться в финансовый и стал затрагивать не только США. К началу 2008 года кризис приобрёл мировой характер и постепенно начал проявляться в повсеместном снижении объемов производства снижении спроса и цен на сырьё росте безработицы.
86099. RC – усилитель низкой частоты 2.15 MB
  Рассматриваемый в курсовой работе каскад предварительного усиления предназначен для усиления входного сигнала с минимальными нелинейными искажениями до величины, необходимой для обеспечения выделения на выходном каскаде заданной мощности. Для уменьшения нелинейности выбирается режим класса А, т.е. линейный участок входной характеристики транзистора.
86100. Статистические методы изучения затрат на производство продукции 775.5 KB
  Предприятие в процессе своей производственно-коммерческой деятельности совершает материальные и денежные затраты на воспроизводство основных фондов и оборотных средств производство и реализацию продукции и др. Наибольший удельный вес во всех расходах предприятия занимают затраты на производство продукции. Цель курсовой работы изучение статистических методов анализа затрат на рубль товарной продукции.
86101. Теоретические основы разработки тестового контроля 113.33 KB
  Для достижения поставленной цели необходимо выполнить следующие задачи: выявить дидактические функции педагогических тестов; определить требования предъявляемые к тестовым заданиям; дать классификацию тестовым заданиям рассмотреть их формы и виды; спроектировать 3 урока по дисциплине Информатика.
86102. Социальная работа с асоциальной семьей 96.66 KB
  К типичным проблемам социальной работы относятся проблемы: охраны здоровья населения гуманизации общественных отношений современной семьи защиты материнства и детства детейсирот молодежи женщин пенсионеров инвалидов лиц без определенного места жительства мигрантов беженцев безработных. Школа призвана координировать совместные усилия семьи и общественности по формированию социально благоприятной среды воспитания детей. Практика показывает что издержки в воспитании детей это первейший и главнейший показатель неблагополучия семьи....