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

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



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

JavaScript Регулярные выражения Введение Создание регулярных выражений Флаги (способы поиска по шаблону) Метасимволы Специальные символы Квантификаторы.
RegExp Регуля́рные выраже́ния (англ. regular expressions, сокр. RegExp, RegEx, жарг. регэ́кспы или ре́гексы) это формальный язык поиска и осуществления.
Массивы в С#. Массивом называют упорядоченную последовательность элементов одного типа. Каждый элемент массива имеет индексы, определяющие порядок элементов.
Строки в С#. Отдельные символы, чаще всего, его называют типом Char. Строки постоянной длины, часто они представляются массивом символов Char[]. Строки.
Строки, Списки, Кортежи.. Строки (string) Строка-это последовательность букв Для обозначения строки используются одинарные или двойные кавычки. Для длинных.
Регулярные выражения Денис С. Мигинский. Происхождение регулярных выражений Регулярные выражения – язык предназначенный для синтаксического разбора текстовых.
Строки, символы и регулярные выражения Лекция 6. Символы. Тип сhar это 16-разрядный тип данных без знака. Для представления символов в С# используется.
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
Работа со строковыми типами данных. Строка – упорядоченная последовательность символов. Строковая константа – последовательность символов, заключенных.
Операции Условная операция ? : Если истинно, то результатом будет, иначе. Например, int x = a < b ? a : b вычисляет минимум из a и b.
О СНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ. П ЛАН 1. Символьные и строковые величины. Операции над символьными и строковыми величинами. 2. Символьный тип.
ДЕЛЕГАТЫ Лекция 7 1. Зачем нужны делегаты 2 И данные, и код располагаются в памяти компьютера по определенным адресам. Передача адресов данных в C# происходит.
Строки и регулярные выражения 1 ©Павловская Т.А. (СПбГУ ИТМО)
ТИПЫ ДАННЫХ: СИМВОЛЫ И СТРОКИ СИМВОЛЬНЫЙ ТИП ДАННЫХ CHAR Строка типа String – это цепочка символов типа Char. String используется для хранения текстовых.
ИТЕРАТОРЫ И LINQ Лекция 1. Интерфейс IEnumerable и IEnumerator Любая коллекция реализует интерфейс IEnumerable. public interface IEnumerable : IEnumerable.
Строки в Pascal
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
Символьные и строковые переменные. Общие понятия Для того чтобы ЭВМ могла обрабатывать тексты, она должна уметь оперировать не только с числами, но и.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Транксрипт:

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

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

СимволИнтерпретация Категория: escape-последовательности \b \t \r \nПри использовании его в квадратных скобках соответствует символу "обратная косая черта" с кодом Категория: подмножества (классы) символов.Соответствует любому символу, за исключением символа конца строки [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" в "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");

Класс 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; Console.WriteLine("Поиск по образцу"); //образец задает подстроку, начинающуюся с символа 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);//Число совпадений 1 Console.WriteLine("кок и кук"); strpat="(т|к).(т|к)"; str="кок тот кук тут как кот"; FindMatches(str, strpat);// Число совпадений 6 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); }

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); }