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

 

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

42164. НЕОБРАТИМЫЙ МАГНИТОУПРУГИЙ ЭФФЕКТ ФЕРРОМАГНЕТИКА ПРИ УДАРЕ. ИЗМЕРЕНИЕ СИЛЫ УДАРА 81 KB
  У магнитотвердых материалов таких как кобальтовые стали альнико бариевые ферриты SmCo5 NdFeB и другие из которых делаются постоянные магниты требующие огромные поля чтобы междоменные границы начали двигаться. Под действием магнитного поля весь каркас границ приходит в движение и в результате домены с намагниченностью ориентированной вдоль поля увеличиваются в размерах за счет антипараллельных или поперечных доменов. В больших полях МДГ исчезают и материал намагничивается до насыщения. Зависимость намагниченности I от поля для...
42165. НЕЛИНЕЙНЫЕ РЕГРЕССИОННЫЕ МОДЕЛИ 118.5 KB
  ls logy c x1 x2 x3 x4 x5 Логарифмическое уравнение . ls y c logx1 logx2 logx3 logx4 logx5 Гиперболическое уравнение . ls logy c logx1 logx2 logx3 logx4 logx5 Показательное уравнение βi 0 βi≠1. ls logy=c1logc2x1logc3x2logc4x3 Примечание: Переменные содержащие в наблюдениях значения 0 нельзя логарифмировать и брать обратную величину.
42166. ВЫБОР РЕГРЕССИОННОЙ МОДЕЛИ 242.5 KB
  Ранее предполагалось что мы имеем дело с правильной спецификацией модели то есть считалось что зависимая переменная y регрессоры X и оцениваемые параметры β связаны соотношением y = Xβ ε и выполняются условия ГауссаМаркова. Рассматривается два основных случая: В оцениваемой модели отсутствует часть независимых переменных имеющихся в истинной модели исключение существенных переменных: истинная модель: y = Xβ Zγ ε длинная регрессия; оцениваемая модель: y = Xβ ε короткая регрессия. В оцениваемой модели присутствуют...
42167. ДІЇ НАД МАТРИЦЯМИ 137 KB
  Знайти і видати на екран і в файл значення: сум модулів елементів кожного стовпчика матриці А, середнього арифметичного найменших елементів кожного рядка матриці А; обчислити матрицю В, яка визначається за формулами і видати на екран; в матриці А поміняти місцями найбільший за модулем елемент останнього рядка і найменший за модулем елемент першого стовпчика і видати на екран.
42168. Тригери. Опис тригерів на мові VHDL 225.5 KB
  Хід роботи Отримати у викладача завдання на лабораторну роботу відповідно до номера свого варіанту.3 Примітиви тригерів які використовуються пакетом Qurtus II № варіанта dff jkffe Виписати з довідника параметри мікросхем які використовувались при створенні схеми таблиці дійсності та часові діаграми роботи тригерів. Допуском до виконання лабораторної роботи є розроблена електрична принципова схема та часові діаграми її роботи побудовані з врахуванням затримок. При побудові часових діаграм проглянути всі режими роботи схеми.
42169. Регістри. Принципи побудови та часові діаграми регістрів 133.5 KB
  Допуском на лабораторну роботу є виписані часові діаграми регістра вказаного в стовбці Тип регістра таблиці 6.1 а також схема та часові діаграми роботи трьох розрядного регістра тип якого вказаний в таблиці 6. Зібрати в пакеті Qurtus II схему перевірки стандартного регістра тип якого вказаний в стовбці Аналог таблиці 6. Побудувати часові діаграми для перевірки регістра і порівняти їх з діаграмами виписаними в п.
42170. ИССЛЕДОВАНИЕ СЛОЖНОЙ ЭЛЕКТРИЧЕСКОЙ ЦЕПИ ПОСТОЯННОГО ТОКА 151.5 KB
  Измерить и проверить расчетом потенциалы точек контура сложной электрической цепи. Для расчета простых электрических цепей используют закон Ома для участка цепи не содержащего ЭДС. Например если между двумя точками а и b в электрической цепи включены только пассивные элементы резисторы то закон Ома для этого участка цепи запишется: .
42171. ИССЛЕДОВВАНИЕ ЦЕПИ ПЕРЕМЕННОГО ТОКА С ПОСЛЕДОВАТЕЛЬНЫМ СОЕДИНЕНИЕМ АКТИВНОГО И ЕМОСТНОГО СОПРОТИВЛЕНИЙ 247 KB
  Экспериментальное исследование характера изменения тока мощности и падений напряжений на участках последовательной цепи состоящей из активного и емкостного сопротивлений а также построение круговой диаграммы. При прохождении синусоидального тока по цепи изображенной на рис.1а следует иметь ввиду что ток в любом сечении цепи один и тот же а общее напряжение согласно второму закону Кирхгофа равно геометрической сумме...
42172. ИССЛЕДОВВАНИЕ ЦЕПИ ПЕРЕМЕННОГО ТОКА С ПОСЛЕДОВАТЕЛЬНЫМ СОЕДИНЕНИЕМ АКТИВНОГО И ИНДУКТИВНОГО СОПРОТИВЛЕНИЙ 299.5 KB
  Экспериментальное исследование характера изменения тока мощности и падений напряжений на участках последовательной цепи состоящей из активного и индуктивного сопротивлений а также построение круговой диаграммы. При прохождении синусоидального тока по цепи изображенной на рис.1б ток в любом сечении цепи один и тот же а общее напряжение согласно второму закону Кирхгофа равно геометрической сумме падений напряжений на...