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

 

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

22981. Робота зі співпроцесором 3.19 MB
  Обгрунтування необхідності співпроцесора Хоча мікропроцесор К1810ВМ86 оперує з 16розрядними числами відносна точність його обчислень не дуже висока. Такий допоміжний процесор має назву співпроцесора. Включення співпроцесора Для спільної роботи зі співпроцесором мікропроцесор МП86 слід включити у максимальний режим = 0.
22982. Тенденції у розвитку мікропроцесорної техніки 1011.5 KB
  Другий шлях полягає навпаки у роздрібненні секціонуванні мікропроцесора на окремі функціональні блоки і модулі кожний з яких виконує свої операції: операційний блок блок мікрокомандного керування блок памяті мікрокоманд та інше. Його система команд майже цілком співпадає з системою команд МП80 і відрізняється від неї лише декількома додатковими командами про які мова йтиме далі. У апаратному відношенні МП85 містить всі ті ж блоки що і МП80 але має крім того: блок керування перериваннями котрий розширює можливість звернення до...
22983. Система команд та методи адресації в мікропроцесорі КР1810ВМ86 1.05 MB
  Серед цього списку можна виявити що деякі команди не змінили ані форми ані змісту наприклад HLT NOP STC IN OUT JMPCALL тощо. Деякі команди зберегли свій зміст але мають дещо іншу мнемоніку: для МП80 INR DCR ANA ORA XRA JZ JNZ JC JNC для МП86 INC DEC AND OR XOR JE JNE JB JNB Зявилися принципово нові команди пoвязані з новими можливостями МП86: MUL множення; DIV ділення; NEG утворення доповняльного коду; NOTінверсія; TEST операція І без фіксації результату тільки заради...
22984. Мультипроцесорні системи 4.79 MB
  Дійсно звернення до памяті або до зовнішніх пристроїв та захоплення системної шини дозволяється одночасно лише одному з процесорів тоді як останні повинні в цей час переробляти раніш одержані дані або знаходитись в режимі очікування. Такий часовий розподіл загальних ресурсів системи має назву арбітражу системної шини і виконується групою пристроїв спеціальних ІМС так званих арбітрів шини. Арбітр шини дозволяє захоплення системної шини лише одному з процесорів що виставили запит тому котрий посідає найвищого пріоритету і...
22985. Мікропроцесори 80386 і 80486 4.79 MB
  Це дозволяє йому здійснювати обмін з памяттю зі швидкістю до 32 Мбайт сек і виконувати до 5 мільйонів операцій у секунду MIPS. Отже під час виконання одної команди відбувається декодування другої а третя видобувається з памяті. Усі можливості МП386 мультипрограмність віртуальна память захист пріоритети зповна відкриваються лише в захищеному режимі. У порівнянні з МП286 у МП386 існують істотні відміни в організації віртуальної памяті.
22986. Поняття про RISC-процесори. Процесори п’ятого та шостого поколінь 6.22 MB
  Процесори пятого та шостого поколінь Поняття про RISCпроцесори Якісний стрибок у розвитку мікропроцесорних систем відбувся з появою мікропроцесора 8086. Такі процесори і компютери дістали назву RISC процесорів та RISC компютерів на відміну від процесорів та компютерів зі складною системою команд Complex Instruction Set Computer CISC компютер. Перший справжній RISC компютер було створено наприкінці 70х років в університеті Берклі.
22987. Діагностика несправностей у мікропроцесорних системах 739 KB
  Тут можна навести таку наочну аналогію: візьміть на сторінці друкованого тексту вертикальний рядок літер що розташовані одна над одною і спробуйте встановити зміст тексту. Тому третя трудність полягає у тому щоб будьякимсь чином представити інформацію що міститься у вихідному тестсигналі у компактній та зрозумілій формі по якій можна було б судити про справність або несправність пристрою що перевіряється. Тестпрограма повинна бути періодичною щоб можна було проконтролювати відтворюваність її результатів від кількох актів тестування....
22988. Декотріі принципи роботи сучасних мікропроцесорів та ЕОМ 1.54 MB
  Вони показують яка команда виконується до якої комірки памяті або зовнішнього пристрою звертається процесор і містять іншу важливу і вичерпну інформацію. Після того як у програмі дається сигнал вивільнити мікросхему вміст усіх регістрів переписується в область памяті що має назву сегмента стану задачі TSS Taske State Segment. При роботі у мультипрограмному режимі можуть виникати певні труднощі з використанням оперативної памяті котра стає тепер вже загальною для кількох задач. Можливі непередбачені ситуації коли одна програма...
22989. Віртуальна пам’ять. Мікропроцесор 80286 4.24 MB
  Мікропроцесор 80286 Як добре відомо процесор може безпосередньо працювати лише з тією інформацією яка записана в його оперативній памяті. Однак обєм оперативної памяті у сучасних ЕОМ порівняно невеликий і часто виявляється недостатнім для розвязання більшменш складних задач. Віртуальна організація памяті дає користувачеві практично необмежений обєм памяті.