Опубликован: 19.02.2009 | Уровень: специалист | Доступ: свободно
Лекция 10:

Регулярные выражения

< Лекция 9 || Лекция 10: 12 || Лекция 11 >

Практикум

Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания.

  1. Определите, содержится ли в сообщении заданное слово.
  2. Выведите все слова заданной длины.
  3. Выведите на экран все слова сообщения, записанные с заглавной буквы.
  4. Удалите из сообщения все однобуквенные слова.
  5. Удалите из сообщения все знаки препинания.
  6. Удалите из сообщения все русские слова.
  7. Удалите из сообщения только те русские слова, которые начинаются на гласную букву.
  8. Заменить все английские слова на многоточие.
  9. Найти максимальное целое число, встречающееся в сообщении.
  10. Найти сумму всех имеющихся в тексте чисел (целых и вещественных, причем вещественное число может быть записано в экспоненциальной форме).
  11. В сообщении могут встречаться номера телефонов, записанные в формате xx-xx-xx, xxx-xxx или xxx-xx-xx. Вывести все номера телефонов, которые содержатся в сообщении.
  12. В сообщении может содержаться дата в формате дд.мм.гггг. В заданном формате дд - целое число из диапазона от 1 до 31, мм - целое число из диапазона от 1 до 12, а гггг - целое число из диапазона от 1900 до 2010 (если какая-то часть формата нарушена, то данная подстрока в качестве даты не рассматривается). Выведите на экран все даты, которые относятся к текущему году.
  13. В сообщении могут содержаться IP-адреса компьютеров в формате d.d.d.d, где d - целое число из диапазона от 0 до 255. Вывести все IP-адреса содержащиеся в тексте.
  14. В сообщении могут содержаться IP-адреса компьютеров в формате d.d.d.d, где d - целое число из диапазона от 0 до 255. Удалить из сообщения IP-адреса, в которых последнее число d начинается с заданной цифры (данная цифра вводится с клавиатуры).
  15. Выведите на экран все адреса web-сайтов, содержащиеся в сообщении.
  16. В сообщении может содержаться дата в формате дд.мм.гггг. В заданном формате дд - целое число из диапазона от 1 до 31, мм - целое число из диапазона от 1 до 12, а гггг - целое число из диапазона от 1900 до 2010 (если какая-то часть формата нарушена, то данная подстрока в качестве даты не рассматривается). Замените каждую дату сообщения на дату следующего дня.
  17. В сообщении может содержаться дата в формате дд.мм.гггг. В заданном формате дд - целое число из диапазона от 1 до 31, мм - целое число из диапазона от 1 до 12, а гггг - целое число из диапазона от 1900 до 2010 (если какая-то часть формата нарушена, то данная подстрока в качестве даты не рассматривается). Замените каждую дату в сообщении на дату предыдущего дня.
  18. В сообщении может содержаться время в формате чч:мм:сс. В заданном формате чч - целое число из диапазона от 00 до 24, мм и сс - целые числа из диапазона от 00 до 60 (если какая-то часть формата нарушена, то данная подстрока в качестве даты не рассматривается). Преобразуйте каждое время к формату чч:мм, применив правило округления до целого числа минут.
  19. В сообщении может содержаться время в формате чч:мм. В заданном формате чч - целое число из диапазона от 00 до 24, мм - целое число из диапазона от 00 до 60 (если какая-то часть формата нарушена, то данная подстрока в качестве даты не рассматривается). Увеличите время на n минут.
  20. В сообщении может содержаться время в формате чч:мм. В заданном формате чч - целое число из диапазона от 00 до 24, мм - целое число из диапазона от 00 до 60 (если какая-то часть формата нарушена, то данная подстрока в качестве даты не рассматривается). Уменьшите время на n часов.

Самостоятельная работа

Теоретический материал

Класс Group позволяет группировать соответствия на основе синтаксиса регулярных выражений и представлять результаты действия одного группирующего выражения. Группирующее выражение именует группу и задает регулярное выражение. Любой фрагмент строки, удовлетворяющий этому регулярному выражению, будет добавлен в группу. Например, группу ip можно задать следующим выражением:

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

В данной записи ( ?) говорит о том, что начинает формироваться группа, <ip> определяет имя данной группы, а (\d|\.)+)\s определяет шаблон регулярного выражения, который будет связан с этой группой. Если при поиске фрагмент текста будет соответствовать данному шаблону, то этот фрагмент будет заноситься в группу ip.

Класс Match является производным от класса Group и имеет коллекцию Groups, которая содержит все группы, обнаруженные объектом Match. Создание и использование коллекции Groups и классов Group иллюстрируется следующим примером:

static void Main(string[] args)
{
 string text = @"04:55:34 223.34.12.156 www.aaa.ru
                 04:59:55 213.134.112.56 www.bbb.cc.com
                 05:05:01 223.34.12.156 www.aaa.ru";
 Regex theReg = new  Regex(@"(?<time>(\d|\:)+)\s"+
                           @"(?<ip>(\d|\.)+)\s"+
                           @"(?<site>\S+)");
 MatchCollection theMatches = theReg.Matches(text);
 foreach (Match theMatch in theMatches)
 {
  if (theMatch.Length != 0)
  {
   Console.WriteLine("\ntheMatch: {0}", theMatch.ToString()); //1
   Console.WriteLine("time: {0}", theMatch.Groups["time"]);  //2
   Console.WriteLine("ip: {0}", theMatch.Groups["ip"]);  //3
   Console.WriteLine("site: {0}", theMatch.Groups["site"]);  //4
  }
 }
}

В этом примере строка 1 целиком выводит фрагмент текста совпавший с регулярным выражением, а строки 2-4, то только тот текст, который был помещен в конкретную группу

Практическое задание

  1. Шаблоны регулярных выражений для групп time, ip и site записаны в упрощенном виде. Преобразуйте их к такому виду, чтобы они соответствовали ограничениям, накладываемым на формат времени, ip-адреса и адреса web-сайта.
  2. Используя дополнительную литературу и Интернет, более подробно изучите работу с классом Group и коллекцией Groups класса Match.
< Лекция 9 || Лекция 10: 12 || Лекция 11 >