
Лекция 9. Регулярные выражения.pptx
- Количество слайдов: 14
Алгоритмы обработки данных на основе регулярных выражений Лекция 9
Основные понятия Регулярные выражения – это один из способов поиска подстрок (соответствий) в строках. Осуществляется с помощью просмотра строки в поисках некоторого шаблона. Общеизвестным примером могут быть символы «*» и «? » . Регулярные выражения можно представить себе как мини-язык программирования, имеющий одно специфическое назначение: находить подстроки в больших строковых выражениях.
Основные понятия Регулярные выражения предоставляют мощный, гибкий и эффективный метод обработки текста. Обширные возможности сопоставления шаблонов, предоставляемые регулярными выражениями, позволяют быстро анализировать большие объемы текста, отыскивая в них определенные символьные шаблоны, проверять текст на соответствие определенным заранее шаблонам (например, формату адреса электронной почты), извлекать, изменять, заменять или удалять подстроки текста, а также добавлять извлеченные строки в коллекцию для формирования отчетов. Основа работы с регулярными выражениями в C# построена в основном на классе Regex, располагающемся в пространстве имен System. Text. Regular. Expressions.
Действия Обычно с помощью регулярных выражений выполняются три действия: Проверка наличия соответствующей шаблону подстроки. Поиск и выдача пользователю соответствующих шаблону подстрок. Замена соответствующих шаблону подстрок.
Синтаксис регулярных выражений на С# Регулярное выражение на C# задается строковой константой. Это может быть обычная или @-константа. Чаще всего, следует использовать именно @-константу. Дело в том, что символ "" широко применяется в регулярных выражениях как для записи escapeпоследовательностей, так и в других ситуациях. Обычные константы в таких случаях будут выдавать синтаксическую ошибку, а @-константы не выдают ошибок и корректно интерпретируют запись регулярного выражения.
Специальные символы для формирования регулярных выражений t – символ табуляции r – символ возврата каретки n –новая строка e – символ escape. – любой символ за исключением конца строки [abd] – в квадратных скобках может идти любой из символов, находящихся в них [^abd] – а здесь, наоборот, должен идти символ, который не присутствует в скобках [0 -9 a-f. A-F] – символы могут идти в диапазоне. Например, от 0 до 9 может быть представлена любая цифра в этом промежутке
Специальные символы для формирования регулярных выражений w – большие и маленькие латинские буквы, цифры, знак подчеркивания s – пробел d – любая цифра *- итерация. Например, d* будет означать любое количество цифр, идущих подряд + - положительная итерация; ? – ноль или одно соответствие. Например, может быть вхождение цифры, а может и не быть {n} – точное количество соответствий {n, } – по меньшей мере, n соответствий {n, m} – от n до m соответствий
Пример построения регулярного выражения Задача. Определить вхождение данной подстроки « 30. 11$. » в произвольную строку. Построим и разберем конструкцию отвечающую за формат записи денег: «sd+$. » . Здесь мы имеем следующее: «мы ищем подстроку которая начинается с пробела (s) далее идет некоторое положительное количество цифр (d+) далее символ точка (. ), далее опять некоторое положительное число цифр, далее символ доллар ($) и символ точка» . Так как в регулярном языке C# имеются технические символы ‘$’, ‘. ’, то для указания их как символов необходимо указывать слеш перед ними. Для неслужебных символов, указывать слеш не нужно, например если бы разделитель была бы не точка а ‘: ’, то числа бы разделялись ‘d+: d+’!
Пример построения регулярного выражения Регулярное выражение немного некорректно, ибо курс доллара может быть целым числом без дробной части, а следовательно наше выражение не сработает. Добавим оператор «? » — отвечающий, за то, что указанный символ или набор символов могут и не быть на данном месте. В нашем случае имеем набор символов: sd+(. d+)? $.
Методы класса Regex Replace(String, String) – в указанной входной строке заменяет все строки, соответствующие указанному регулярному выражению, указанной строкой замены. Is. Match(String, String) – указывает, обнаружено ли в указанной входной строке соответствие заданному регулярному выражению Match(String) – ищет в указанной входной строке первое вхождение регулярного выражения.
Методы класса Regex Matches(String, String) – ищет в указанной входной строке все вхождения заданного регулярного выражения Split(String, String) – разделяет входную строку в позициях, определенных шаблоном регулярного выражения.
Пример. Замена подстрок Предположим, список рассылки содержит записи, в которых, помимо имени и фамилии, может указываться обращение ("Mr. ", "Mrs. ", "Miss" или "Ms. "). Если при создании меток для конвертов по такому списку указывать обращение не требуется, можно использовать для удаления обращений регулярное выражение, как показано в примере.
Пример. Замена подстрок using System; using System. Text. Regular. Expressions; 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. Write. Line(Regex. Replace(name, pattern, String. Empty)); } } Шаблон регулярного выражения (Mr. ? |Mrs. ? |Miss |Ms. ? ) совпадает с любым вхождением "Mr ", "Mr. " , "Mrs ", "Mrs. " , "Miss ", "Ms или "Ms. ". Вызов метода Regex. Replace приведет к замене найденных при сопоставлении подстрок на String. Empty, другими словами, найденная подстрока удаляется из исходной строки.
Пример static void Main(string[] args) { Console. Write. Line("Работа с регулярными выражениями"); Console. Write. Line("Введите строку и нажмите Enter"); string ip = Console. Read. Line(); string pattern = @"dd? d? . dd? "; Regex regex = new Regex(pattern); Match match = regex. Match(ip); while (match. Success) { Console. Write. Line("IP-адрес найден. Значение "+match. Value); match = match. Next. Match(); } Console. Read. Line(); }
Лекция 9. Регулярные выражения.pptx