
lab_3
.docxЛабораторная работа №3 – Строки и регулярные выражения.
Цель работы: Ознакомление с синтаксисом регулярных выражений .NET и их использование для преобразования текста.
Методические пояснения и рекомендации к выполнению лабораторной работы.
-
Для успешного использования регулярных выражений необходимо освоение его языка описания, состоящего из символов двух видов: обычных и метасимволов. Обычный символ представляет в выражении сам себя, а метасимвол – некоторый класс символов, например любую цифру или букву.
-
В регулярных выражениях часто используют повторители. Повторители – это метасимволы, которые располагаются непосредственно после обычного символа или класса символов и задают количество его повторений в выражении.
-
В регулярных выражениях можно использовать конструкцию выбора из нескольких элементов выражения. Варианты выбора перечисляются через вертикальную черту. Для группирования элементов выражения используются круглые скобки. Например, если требуется определить присутствует ли в тексте хотя бы один элемент из списка ”cat”, “dog” и “horse”, можно использовать регулярное выражение: cat|dog|horse.
-
Если требуется описать в выражении обычный символ, совпадающий с каким-либо метасимволом, его предваряют обратной косой чертой. Например, для поиска в тексте символа точки следует записать \. , а для поиска косой черты - \\ .
-
Для группирования элементов выражения используются круглые скобки. Группирование применяется во многих случаях, например, если требуется задать повторитель не для отдельного символа, а для последовательности. Кроме того, группирование служит для запоминания в некоторой переменной фрагмента текста, совпавшего с выражением, заключенным в скобки. Имя переменной задается в угловых скобках или апострофах: (? <имя_переменной> фрагмент_выражения). Фрагмент текста, совпавший при поиске с фрагментом регулярного выражения, заносится в переменную с заданным именем.
-
Еще один вариант применения группирования – формирование обратных ссылок. Все конструкции, заключенные в круглые скобки, автоматически нумеруются начиная с 1. Эти номера, предваренные обратной косой, можно использовать для ссылок на соответствующую конструкцию. Круглые скобки могут быть вложенными, при этом номер конструкции определяется порядком открывающей скобки в выражении.
-
В регулярное выражение можно помещать комментарии, которые либо помещаются внутрь конструкции (?#), либо располагаются, начиная от символа # до конца строки.
-
Классы библиотеки .NET для работы с регулярными выражениями объединены в пространство имен System.Text.RegularExpressions.
Формулировка задания
Задан файл с текстом произвольной длины и содержания.
Файлы с текстом сгенерировать на основе:
-
Книги в формате TXT
-
Книги в формате HTML
Требуется считать текст из файла и произвести с ним рекомендуемые преобразования. При этом, для описания регулярного выражения в классе Regex определить перегруженные конструкторы с параметрами для обработки выражения.
Обработка выражения подразумевает:
А. Поиск в тексте повторяющихся слов, расположенных подряд и разделенных произвольным количеством пробелов, независимо от регистра;
Б. Поиск фрагмента строки, соответствующих заданному выражению;
В. Поиск повторяющихся слов в двух строках;
Д. Выделение из строки слов и чисел;
З. Замена всех вхождений какого-либо символа другим символом;
И. Анализ текстового файла журнала Web – сервера (файлы архива apache-samples.rar), каждая строка которого содержит информацию об одном соединении с сервером для составления итогового отчета в удобной для восприятия форме;
K. Определить соответствует ли текст регулярному выражению;
Л. Вернуть все подстроки совпадающие с регулярным выражением;
О. Заменить все вхождения регулярного выражения заданной строкой (например, заменить все теги html на пустые строки).
Контрольные вопросы:
-
Что реализует регулярное выражение?
-
Какие действия можно выполнять с помощью регулярных выражений?
-
Что позволяет делать класс Regex и конструктор этого класса?
-
Приведите примеры некоторых шаблонов, которые можно передавать в качестве параметра классу Regex.
-
Какие вспомогательные класса, помимо Regex и Match определены в пространстве имен Sysem.Text.RegularExpressions и их содержание?