Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемВячеслав Аношкин
1 Регулярные выражения
2 Регулярные выражения это один из способов поиска подстрок (соответствий) в строках. Используются для: проверки наличия соответствующей шаблону подстроки; поиска и выдачи пользователю соответствующих шаблону подстрок; замены соответствующих шаблону подстрок. using System.Text.RegularExpression; Regex re = new Regex("образец", "опции"); MatchCollection me = re.Matches("строка для поиска"); iCountMatchs = me.Count;
3 СимволИнтерпретация Категория: escape-последовательности \b \t \r \nПри использовании его в квадратных скобках соответствует символу "обратная косая черта" с кодом, например, \u0008 Категория: подмножества (классы) символов.Соответствует любому символу, за исключением символа конца строки [aeiou]Соответствует любому символу из множества, заданного в квадратных скобках [^aeiou]Отрицание. Соответствует любому символу, за исключением символов, заданных в квадратных скобках [0-9a-fA-F]Задание диапазона символов, упорядоченных по коду. Так, 0-9 задает любую цифру \p{name}Соответствует любому символу, заданному множеству с именем name, например, имя Ll задает множество букв латиницы в нижнем регистре. Поскольку все символы разбиты на подмножества, задаваемые категорией Unicode, то в качестве имени можно задавать имя категории \P{name}Отрицание. Большая буква всегда задает отрицание множества, заданного малой буквой \wМножество символов, используемых при задании идентификаторов - большие и малые символы латиницы, цифры и знак подчеркивания \sСоответствует символам белого пробела \dСоответствует любому символу из множества цифр
4 Категория: Операции (модификаторы) *Итерация. Задает ноль или более соответствий; например, \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
5 * Соответствует 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
6 Граница слова Для задания границ слова используются метасимволы '\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 - Позволяет интерпретировать конец строки как обыкновенный символ-разделитель. х - Исключает из образца неприкрытые незначащие символы (пробелы, табуляция и т.д.). г - Ищет справа налево.
7 Класс Regex Метод Match - поиск одного соответствия. Метод Matches - позволяет разыскать все подстроки, удовлетворяющие образцу. Метод NextMatch - запускает новый поиск, начиная с того места, на котором остановился предыдущий поиск. Метод Split - является обобщением метода Split класса String. Позволяет, используя образец, разделить искомую строку на элементы. Метод Replace – позволяет делать замену найденного образца.
8 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 }
9 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); }
10 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);
11 Классы 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: для
12 Классы 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 = "";
13 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);//
14 Составной шаблон: 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); }
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.