Классы Group и GroupCollection

Коллекция GroupCollection возвращается при вызове свойства Group объекта Match. Имея эту коллекцию, можно добраться до каждого объекта Group. Класс Group является наследником класса Capture и, одновременно, родителем класса Match.

Внимательно рассматривая таблицу, которая описывает символы, используемые в регулярных выражениях, в частности символы группирования, то можно понять несколько важных фактов, связанных с группами:

· при обнаружении одной подстроки, удовлетворяющей условию поиска, создается не одна группа, а коллекция групп;

· группа с индексом 0 содержит информацию о найденном соответствии;

· число групп в коллекции зависит от числа круглых скобок в записи регулярного выражения. Каждая пара круглых скобок создает дополнительную группу, которая описывает ту часть подстроки, которая соответствует шаблону, заданному в круглых скобках;

· группы могут быть индексированы, но могут быть и именованными, поскольку в круглых скобках разрешается указывать имя группы.

Создание именованных групп крайне полезно при разборе строк, содержащих разнородную информацию.

Класс Regex позволяет объединять регулярные выражения в группы. Это бывает очень полезно, если необходимо выбрать из исходной строки все подстроки, удовлетворяющие определенной категории, и таких категорий несколько.

Например, нужно выбрать все подстроки, которые могут являться IP адресами и объединить их вместе. Для этого существует класс Group. Любое регулярное выражение может быть добавлено в группу и представлять свою группу по имени.

Например: @"(? <ip>(\ d |\.)+)\s "

Имя группы задается в скобках, перед которыми ставится знак (?). Далее следует описание регулярного выражения, определяющего группу. Класс Match явлется производным от класса Group и содержит коллекцию объектов Group, к которым можно обратиться через свойство Groups.

 

// Программа 8. Создание именованных групп регулярных выражений

public static void Main() {

string stringl = "04:03:27 127.0.0.0 GotDotNet.ru";

Regex theReg = new Regex(

@"(?<время>(\d|\:)+)\s" +

@"(?<ip>(\d|\.)+)\s" +

@"(?<url>\S+)");

// группа time = одна и более цифр или двоеточий за которыми следует пробельный символ

// группа ip адрес = одна и более цифр или точек за которыми следует пробельный символ

// группа url = один и более непробельных символов

// получаем коллекцию поиска

MatchCollection theMatches = theReg.Matches (stringl);

foreach (Match theMatch in theMatches) {

if (theMatch.Length!= 0) {

// выводим найденную подстроку

Console.WriteLine("\ntheMatch: {0}", theMatch.ToString ()) ;

// выводим группу "time"

Console.WriteLine ("время: {0}", theMatch.Groups["время"]);

// выводим группу "ip"

Console.WriteLine("ip: {0}", theMatch.Groups["ip"]);

// выводим группу "url"

Console.WriteLine("url: {0}", theMatch.Groups["url"]);

}}}

TheMatch: 04:03:27 127.0.0.0 GotDotNet.ru

Время: 04:03:27

Ip: 127.0.0.0

Url: GotDotNet.ru

Вопросы к защите лабораторной работы

 

1. На какие виды и разновидности разделяются все типы данных в C#? Примеры.

2. Основное отличие структурных типов?

3. Основное отличие ссылочных типов?

4. Перечислить все целочисленные арифметические типы данных в C# и их названия в CLR. Указать их диапазон и размер занимаемой памяти.

5. Перечислить все вещественные арифметические типы данных в C# и их названия в CLR. Указать их диапазон и размер занимаемой памяти.

6. Перечислить все символьные типы данных в C# и их названия в CLR. Указать их диапазон и размер занимаемой памяти.

7. Оператор ветвления if … else и его применение в программах.

8. Оператор ветвления switch и его применение в программах.

9. Оператор цикла for и его применение в программах.

10. Оператор цикла foreach и его применение в программах.

11. Операторы цикла while и do…while. Применение в программах.

12. Что такое массив?

13. Определение одномерного массива в С#. Инициализация одномерного массива.

14. Определение многомерного массива в С#. Инициализация многомерного массива.

15. Определение ступенчатых массивов и их инициализация.

16. Базовый класс Array, его методы и свойства.

17. Тип char и принимаемые значения переменными типа char.

18. Методы и свойства класса Char.

19. Тип char[] и его отличительные особенности от С/С++.

20. Тип String и способы его конструирования.

21. Операции над строками типа string.

22. Задание строковых констант.

23. Методы и свойства класса String.

24. Динамические методы и свойства класса String.

25. Класс StringBuilder. Конструкторы.

26. Операции над строками StringBuilder.

27. Основные методы класса StringBuilder.

28. Что такое регулярные выражения. Применение регулярных выражений.

29. Задание регулярного выражения. Поиск подстрок с помощью регулярного выражения.

30. Класс Regex и его методы.

31. Поиск первого вхождения образца с текст.

32. Поиск всех вхождений образца в текст.

33. Замена образца в тексте.

34. Разбор текста на слова.

35. Свойства класса Match.

36. Классы Match и MatchCollection и их свойства.

37. Классы Group и GroupCollection и их свойства.

 

Задания к лабораторной работе

Проработать примеры 1-8, данные в теоретических сведениях. Создать на их основе программы. Получить результаты работы программ и уметь их объяснить. Внести их в отчет с комментариями.

2. Выполнить два задания на двумерный массив по заданному номеру варианта и номеру, отсчитанному с конца.

1). Точки на плоскости заданы своими координатами х и у, которые хранятся в двумерном массиве. Найти пару самых удаленных друг от друга точек.

2). Найти суммы элементов двухмерного массива целых чисел, расположенных на линиях, параллельных главной диагонали, и ниже нее.

3). Найти номер столбца двухмерного массива целых чисел, для которого среднеарифметическое значение его эле­ментов максимально.

4). В двухмерном массиве вещественных чисел поменять местами строки и столбцы с одинаковыми номерами.

5). В двухмерном массиве целых чисел поменять места­ми столбцы, симметричные относительно середины масси­ва (вертикальной линии).

6). В двухмерном массиве целых чисел поменять места­ми строки, симметричные относительно середины массива (горизонтальной линии).

7). Поменять местами значения элементов двухмерно­го массива вещественных чисел, симметричных относитель­но побочной диагонали.

8). Найти максимальный элемент среди максимальных элементов строк двухмерного массива целых чисел. Опре­делить номер строки и столбца для такого элемента.

9). Найти максимальный среди минимальных элементов столбцов двухмерного массива целых чисел. Определить номер строки и столбца для такого элемента.

10).Удалить столбец двухмерного массива вещественных чисел, в котором находится максимальный элемент этого массива.

11). Найти все неповторяющиеся элементы двухмерно­го массива целых чисел.

12). Заполнить двухмерный массив целыми числами от 1 до 100 по спирали.

13). Определить:

а) сумму элементов главной диагонали массива;

б) сумму элементов побочной диагонали массива.

в) среднее арифметическое элементов главной диагона­ли массива;

г) среднее арифметическое элементов побочной диагонали массива.

14. Дан двухмерный массив. Вывести на экран его эле­менты следующим образом:

а) сначала элементы первой строки справа налево, затем второй строки справа налево и т. п.;

б) сначала элементы первой строки справа налево, затем второй строки слева направо и т. п.;

в) сначала элементы первого столбца сверху вниз, затем второго столбца сверху вниз и т. п.;

г) сначала элементы первого столбца снизу вверх, затем второго столбца снизу вверх и т. п.

 

3. Выполнить два задания на строки по заданному номеру варианта и номеру, отсчитанному с конца. Использовать в задачах два класса строк: String и StringBuilder.

 

1). Текстовые сообщения часто печатаются строчными буквами, но многие сотовые телефоны имеют встроенные средства преобразования строчной буквы в прописную после символа пунктуации, как точка или знак вопроса. Составить программу, которая будет вводить сообщение в переменную String (на одной строке), а затем обрабатывать его с получением новой строки с прописными буквами в соответствующих местах.

2). Составить программу, которая будет вводить строку в переменную String. Подсчитать, сколько различных символов встречаются в ней. Вывести их на экран.

3). Составить программу, которая будет вводить строку в переменную String. Найти в ней те слова, которые начинаются и оканчиваются одной и той же буквой.

4). Составить программу, которая будет вводить строку в переменную String. Определить, сколько раз в строке встречается заданное слово.

5). Строка, содержащая произвольный русский текст, состоит не более чем из 200 символов. Написать, какие буквы и сколько раз встречаются в этом тексте. Ответ должен приводиться в грамматически правильной форме: например: а — 25 раз, к — 3 раза и т.д.

6). Двумерный массив n x m содержит некоторые буквы русского алфавита, расположенные в произвольном порядке. Написать программу, проверяющую, можно ли из этих букв составить данное слово S. Каждая буква массива используется не более одного раза.

7). Дана строка, содержащая текст и арифметические выражения вида a ® b, где ® — один из знаков +, -, *, /. Выписать все арифметические выражения и вычислить их значения.

8). Составить программу, которая будет вводить строку в переменную String. Удалить из нее все лишние пробелы, оставив между словами не более одного. Результат поместить в новую строку.

9). Составить программу, которая будет вводить строку в переменную String. Напечатать в алфавитном порядке все слова из данной строки, имеющие заданную длину n.

10). Составить программу, которая будет вводить строку в переменную String. Найти слово, встречающееся в каждом предложении, или сообщить, что такого слова нет.

11). Дана строка, содержащая текст на русском языке. В предложениях некоторые из слов записаны подряд несколько раз (предложение заканчивается точкой или знаком восклицания). Получить в новой строке отредактированный текст, в котором удалены подряд идущие вхождения слов в предложениях.

12). Даны две строки А и B. Составьте программу, проверяющую, можно ли из букв, входящих в А, составить В (буквы можно использовать не более одного раза и можно переставлять).

Например, А: ИНТЕГРАЛ; В: АГЕНТ — составить можно; В: ГРАФ —нельзя.

13). Дана строка, содержащая текст на русском языке. Заменить все вхождения заданного слова на другое слово.

 

14). С клавиатуры вводится предложение, слова в котором разделены символом ‘_’. Напечатать все предложения, которые получаются путем перестановки слов исходного текста.

15). Дана строка, содержащая текст на русском языке. В предложениях некоторые из слов записаны подряд несколько раз (предложение заканчивается точкой или знаком восклицания). Отредактировать текст, удалив подряд идущие вхождения слов в предложениях.

16). Дана строка, содержащая зашифрованный русский текст. Каждая буква заменяется на следующую за ней (буква я заменяется на а). Получить новую расшифрованную строку.

17). Даны две строки f1 и f2- Строка f1 содержит произвольный текст. Слова в тексте разделены пробелами и знаками препинания. Строка f2 содержит не более 30 слов, которые разделены запятыми. Эти слова образуют пары: каждое второе является синонимом первого. Заменить в строке f1 те слова, которые можно, их синонимами. Результат поместить в новую строку.

18). В записке слова зашифрованы – каждое из них написано наоборот. Написать программу расшифровки текста.

19). Зашифровать введенный текст, написав каждое слово наоборот.

20). C клавиатуры вводится предложение, слова в котором разделены символом ‘_’ и маска (шаблон) для выбора из предложения нужных слов (содержит буквы и символ заполнителя *, который заменяет любое количество символов). Необходимо выбрать из предложения слова, которые подходят под маску (шаблон). Например:

ВЫРАЖЕНИЕ_ЕСТЬ_ПРАВИЛО

Маска *Н*Е ВЫРАЖЕНИЕ

*РА* ВЫРАЖЕНИЕ, ПРАВИЛО

21). Выберите 10 произвольных букв русского алфавита. Введите произвольное слово. С помощью ключа длиной от 3 до 8 символов произведите шифровку слова в числовую комбинацию.

В Е Ж М Н О П Р С Т КЛЮЧ - 1234

0 1 2 3 4 5 6 7 8 9

МНОЖЕСТВО

3 4 5 2 1 8 9 0 5

1 2 3 4 1 2 3 4 1

 
 


4 6 8 6 3 1 2 4 6 - РЕЗУЛЬТАТ

23). Зашифруйте вводимое с клавиатуры предложение следующим образом: сначала выбираются 2 слова из базы (набор слов, находящихся в тексте программы или вводимых с клавиатуры), затем слово из предложения, затем опять 2 слова из базы, после чего слово из предложения и так далее.

24). С клавиатуры вводятся 4 массива слов:

- существительные в именительном падеже (тормоз, дисковод)

- глаголы (ест, сажает)

- качественные прилагательные во множественном числе (ядовитые, прекрасные)

- существительные в винительном падеже множ. числа (колонки, заборы).

Выбрать случайным образом слова из массивов и составить предложения.

ТОРМОЗ ЕСТ ПРЕКРАСНЫЕ ЗАБОРЫ.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: