Регулярные выражения. Регулярные выражения это один из способов поиска подстрок (соответствий) в строках. Используются для: проверки наличия соответствующей.

Презентация:



Advertisements
Похожие презентации
Регулярные выражения. Регулярные выражения это один из способов поиска подстрок (соответствий) в строках. Используются для: проверки наличия соответствующей.
Advertisements

JavaScript Регулярные выражения Введение Создание регулярных выражений Флаги (способы поиска по шаблону) Метасимволы Специальные символы Квантификаторы.
RegExp Регуля́рные выраже́ния (англ. regular expressions, сокр. RegExp, RegEx, жарг. регэ́кспы или ре́гексы) это формальный язык поиска и осуществления.
Строки, Списки, Кортежи.. Строки (string) Строка-это последовательность букв Для обозначения строки используются одинарные или двойные кавычки. Для длинных.
Работа со строковыми типами данных. Строка – упорядоченная последовательность символов. Строковая константа – последовательность символов, заключенных.
Регулярные выражения Денис С. Мигинский. Происхождение регулярных выражений Регулярные выражения – язык предназначенный для синтаксического разбора текстовых.
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
Строки в Pascal
Понятие строки. Операции со строковыми величинами. Стандартные процедуры и функции обработки строковых величин. Простые алгоритмы работы со строками на.
Символьные и строковые переменные. Общие понятия Для того чтобы ЭВМ могла обрабатывать тексты, она должна уметь оперировать не только с числами, но и.
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
О СНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ. П ЛАН 1. Символьные и строковые величины. Операции над символьными и строковыми величинами. 2. Символьный тип.
Операции Условная операция ? : Если истинно, то результатом будет, иначе. Например, int x = a < b ? a : b вычисляет минимум из a и b.
Лекция 2 С => C++ => C# Большие и маленькие буквы различаются (main, Main, MAIN, mAin – разные имена) После каждого оператора ставится точка с запятой.
П ОСТРОЕНИЕ ТАБЛИЦ ИСТИННОСТИ ДЛЯ СЛОЖНЫХ ВЫСКАЗЫВАНИЙ. Подготовила учитель информатики высшей категории Габриэль Татьяна Васильевна.
Pascal 1 Основы языка Паскаль Информатика и ИКТ Смирнов М.В. МКО ООШ п. Климковка Белохолуницкого района Кировской области.
Переменная - это величина, которая имеет имя, тип и значение. Значение переменной может меняться во время выполнения программы. В компьютерах каждая переменная.
Массивы в С#. Массивом называют упорядоченную последовательность элементов одного типа. Каждый элемент массива имеет индексы, определяющие порядок элементов.
ТИПЫ ДАННЫХ: СИМВОЛЫ И СТРОКИ СИМВОЛЬНЫЙ ТИП ДАННЫХ CHAR Строка типа String – это цепочка символов типа Char. String используется для хранения текстовых.
Строки. Функции для работы со строками. Величины значением которых является последовательность символов называются текстовыми величинами или строками.
Транксрипт:

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

Регулярные выражения это один из способов поиска подстрок (соответствий) в строках. Используются для: проверки наличия соответствующей шаблону подстроки; поиска и выдачи пользователю соответствующих шаблону подстрок; замены соответствующих шаблону подстрок. using System.Text.RegularExpression; Regex re = new Regex("образец", "опции"); MatchCollection me = re.Matches("строка для поиска"); iCountMatchs = me.Count;

СимволИнтерпретация Категория: escape-последовательности \b \t \r \nПри использовании его в квадратных скобках соответствует символу "обратная косая черта" с кодом, например, \u0008 Категория: подмножества (классы) символов.Соответствует любому символу, за исключением символа конца строки [aeiou]Соответствует любому символу из множества, заданного в квадратных скобках [^aeiou]Отрицание. Соответствует любому символу, за исключением символов, заданных в квадратных скобках [0-9a-fA-F]Задание диапазона символов, упорядоченных по коду. Так, 0-9 задает любую цифру \p{name}Соответствует любому символу, заданному множеству с именем name, например, имя Ll задает множество букв латиницы в нижнем регистре. Поскольку все символы разбиты на подмножества, задаваемые категорией Unicode, то в качестве имени можно задавать имя категории \P{name}Отрицание. Большая буква всегда задает отрицание множества, заданного малой буквой \wМножество символов, используемых при задании идентификаторов - большие и малые символы латиницы, цифры и знак подчеркивания \sСоответствует символам белого пробела \dСоответствует любому символу из множества цифр

Категория: Операции (модификаторы) *Итерация. Задает ноль или более соответствий; например, \w* или (abc)*. Аналогично, {0,} +Положительная итерация. Задает одно или более соответствий; например, \w+ или (abc)+. Аналогично, {1,} ?Задает ноль или одно соответствие; например, \w? или (abc)?. Аналогично, {0,1} {n}Задает в точности n соответствий; например, \w{2} {n,}Задает, по меньшей мере, n соответствий; например, (abc){2,} {n,m}Задает, по меньшей мере, n, но не более m соответствий; например, (abc){2,5} Категория: Группирование (? )При обнаружении соответствия выражению, заданному в круглых скобках, создается именованная группа, которой дается имя Name. Например, (? \d{7}). При обнаружении последовательности из семи цифр будет создана группа с именем tel ()Круглые скобки разбивают регулярное выражение на группы. Для каждого подвыражения, заключенного в круглые скобки, создается группа, автоматически получающая номер. Номера следуют в обратном порядке, поэтому полному регулярному выражению соответствует группа с номером 0

* Соответствует 0 или более вхождений предшествующего выражения. Например, 'zo*' соответствует "z" и "zoo". + Соответствует 1 или более предшествующих выражений. Например, "zo+" соответствует "zo" и "zoo", но не "z". ? Соответствует 0 или 1 предшествующих выражений. Например, 'do(es)?' соответствует "do" или "does". {n} n неотрицательное целое. Соответствует точному количеству вхождений. Например, 'о{2}' не найдет "о" в "Bob", но найдет два "о" в "food". {n,} n неотрицательное целое. Соответствует вхождению, повторенному не менее n раз. Например, *о{2,}' не находит "о" в "Bob", зато находит все "о" в "foooood". {n,m} n и m неотрицательные целые числа, где n

Граница слова Для задания границ слова используются метасимволы '\b' и '\В Regex re = new Regex(«\bменя", "ms"); Вариации и группировка Символ | можно использовать для перебора нескольких вариантов. Regex re = new Regex("like (apples|pines|bananas)"); MatchCollection me = re.Matches("I like apples a lot"); Опции i - Поиск без учета регистра. m - Многострочный режим, позволяющий находить совпадения в начале или конце строки, а не всего текста. n - Находит только явно именованные группы в форме (?...). с - Компилирует. Генерирует промежуточный MSIL-код, перед исполнением превращающийся в машинный код. s - Позволяет интерпретировать конец строки как обыкновенный символ-разделитель. х - Исключает из образца неприкрытые незначащие символы (пробелы, табуляция и т.д.). г - Ищет справа налево.

Класс Regex Метод Match - поиск одного соответствия. Метод Matches - позволяет разыскать все подстроки, удовлетворяющие образцу. Метод NextMatch - запускает новый поиск, начиная с того места, на котором остановился предыдущий поиск. Метод Split - является обобщением метода Split класса String. Позволяет, используя образец, разделить искомую строку на элементы. Метод Replace – позволяет делать замену найденного образца.

string FindMatch(string str, string strpat) { Regex pat = new Regex(strpat); Match match =pat.Match(str); string found = ""; if (match.Success) { found =match.Value; Console.WriteLine("Строка ={0}\tОбразец={1}\t Найдено={2}", str, strpat, found); } return(found); } public void TestSinglePat(){ //поиск по образцу string str, strpat, found; //подстрока, начинающаяся с символа a, // далее идут буквы или цифры. str ="start"; strpat found = FindMatch(str,strpat);//art str ="fab77cd efg"; found = FindMatch(str,strpat);//ab77cd //подстрока, начинающаяся с символа a и //заканчивающаяся f с возможными символами b и d в середине strpat = "a(b|d)*f"; str = "fabadddbdf"; found = FindMatch(str,strpat);//adddbdf //диапазоны и escape-символы strpat = "[X-Z]+"; str = "aXYb"; found = FindMatch(str,strpat);//XY strpat str = "aXYZb"; found = FindMatch(str,strpat);//XYZ }

Console.WriteLine("око и рококо"); strpat="око"; str = "рококо"; FindMatches(str, strpat);//Число совпадений ? Console.WriteLine("кок и кук"); strpat="(т|к).(т|к)"; str="кок тот кук тут как кот"; FindMatches(str, strpat);// Число совпадений ? public void TestParsing(){ string str,strpat; str = "А это пшеница, которая в темном чулане хранится, в доме, который построил Джек!"; strpat =" +|, "; //один или несколько пробелов или запятая и пробел Regex pat = new Regex(strpat); string[] words; words = pat.Split(str); int i=1; foreach(string word in words) Console.WriteLine("{0}: {1}",i++,word); } static string FindMatches(string str, string strpat) { Regex pat = new Regex(strpat); MatchCollection match =pat.Matches(str); string found = ""; foreach ( Match mat in match) { found =mat.Value; Console.WriteLine("Строка ={0}\t Образец={1}\t Найдено={2}", str, strpat, found); } return(found); }

Regex r = new string s="bacghghaaab"; s=r.Replace(s,"_$1_"); //строка и строка замены Console.WriteLine("{0}",s); Regex r = new string s="dotsitedotsitedotsiterulez"; s=r.Replace(s,"f",1); //… и сколько раз заменить Console.WriteLine("{0}",s); Regex r = new string s="dotsitedotsitedotsiterulez"; s=r.Replace(s,"f",2,1);//… и с какого вхождения заменить Console.WriteLine("{0}",s);

Классы Match и MatchCollection свойства Index, Length и Value наследованы от Capture. Описывают найденную подстроку - индекс начала подстроки в искомой строке, длину подстроки и ее значение; свойство Groups класса Match возвращает коллекцию групп. Объект GroupCollection позволяет работать с группами, созданными в процессе поиска соответствия; свойство Captures, наследованное от объекта Group, возвращает коллекцию CaptureCollection. public static void Main( ) { string si = "Это строка для поиска"; // найти любой пробельный символ следующий за непробельным Regex theReg = new // получить коллекцию результата поиска MatchCollection theMatches = theReg.Matches (si); // перебор всей коллекции foreach (Match theMatch in theMatches) { Console.WriteLine( "theMatch.Length: {0}", theMatch.Length); if (theMatch.Length != 0) Console.WriteLine("theMatch: {0}", theMatch.ToString( )); }} theMatch.Length: 4 theMatch: Это theMatch.Length: 7 theMatch: строка theMatch.Length: 4 theMatch: для

Классы Group и GroupCollection Создание групп группа с индексом 0 содержит информацию о найденном соответствии; число групп в коллекции зависит от числа круглых скобок в записи регулярного выражения. Каждая пара круглых скобок создает дополнительную группу; группы могут быть индексированы, но могут быть и именованными, поскольку в круглых скобках разрешается указывать имя группы. public void TestAttributes(){ string s1 = "tel: (831-2) "; string s2 = "Адрес: , Москва, 5-й Донской проезд, стр.10,кв.7"; string s3 = " "; string s4 = s1+ s2 + s3; string s5 = s2 + s1 + s3; string pat1 \((\d|-)*\)\s(\d|-)+)\s"; string [0-9А-Яа-я |-|,|.]+)\s"; string pat3 string compat = pat1+pat2+pat3; string tel="", addr = "", em = "";

Regex reg1 = new Regex(pat1); Match match1= reg1.Match(s4); Console.WriteLine("Value =" + match1.Value); // tel: (831-2) tel=match1.Groups["tel"].Value; Console.WriteLine(tel);// (831-2) Regex reg2 = new Regex(pat2); Match match2= reg2.Match(s5); Console.WriteLine("Value =" + match2.Value); // Адрес: , Москва, 5-й Донской проезд, стр.10,кв.7 addr= match2.Groups["addr"].Value; Console.WriteLine(addr); //117926, Москва, 5-й Донской проезд, стр.10,кв.7 Regex reg3 = new Regex(pat3); Match match3= reg3.Match(s5); Console.WriteLine("Value =" + match3.Value); // em= match3.Groups["em"].Value; Console.WriteLine(em);//

Составной шаблон: Regex comreg = new Regex(compat); Match commatch= comreg.Match(s4); tel= commatch.Groups["tel"].Value; Console.WriteLine(tel); addr= commatch.Groups["addr"].Value; Console.WriteLine(addr); em= commatch.Groups["em"].Value; Console.WriteLine(em); }