Классы пространства RegularExpressions

Класс Regex

Это основной класс, объекты которого определяют регулярные выражения. Конструктор класса перегружен. В простейшем варианте ему передается в качестве параметра строка, задающая регулярное выражение. Основные методы класса Regex:

Метод Match запускает поиск соответствия. В качестве параметра методу передается строка поиска, где разыскивается первая подстрока, которая удовлетворяет образцу, заданному регулярным выражением. В качестве результата метод возвращает объект класса Match, описывающий результат поиска.

using System.Text.RegularExpressions;

 

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 =@"a\w+";

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 = @"\u0058Y\x5A"; str = "aXYZb";

found = FindMatch(str,strpat); //XYZ

}

 

Метод Matches позволяет разыскать все вхождения, то есть все подстроки, удовлетворяющие образцу. У алгоритма поиска есть важная особенность - разыскиваются непересекающиеся вхождения подстрок. В качестве результата возвращается объект MatchCollection, представляющий коллекцию объектов Match.

void FindMatches(string str, string strpat) {

Regex pat = new Regex(strpat);

MatchCollection match =pat.Matches(str);

Console.WriteLine("Строка ={0}\tОбразец={1}\tНайдено={2}", str,strpat,match.Count);

}

Console.WriteLine("око и рококо");

strpat="око"; str = "рококо";

FindMatches(str, strpat); //найдено =1

 

Метод NextMatch запускает новый поиск, начиная с того места, на котором остановился предыдущий поиск.

Метод Split является обобщением метода Split класса String. Он позволяет, используя образец, разделить искомую строку на элементы. Поскольку образец может быть устроен сложнее, чем простое множество разделителей, то метод Split класса Regex эффективнее, чем его аналог класса String.

static void Main() {

string si = "Один, Два, Три, Строка для разбора"; 1: Один

Regex theRegex = new Regex(" |, |,"); 2: Два

Три

int id = 1; 4: Строка

foreach (string substring in theRegex.Split(si)) 5: для

Console.WriteLine("{0}: {1}", id++, substring); 6: разбора

}

Метод Replace – позволяет делать замену найденного образца. Метод перегружен. При вызове метода передаются 2 строки - первая задает строку, в которой необходимо произвести замену, а вторая - на что нужно заменить найденную подстроку, причем во второй строке можно использовать подстановки (substitutions) - в указанные места будут подставлены значения захваченных групп с заданными именами. Синтаксис подстановок следующий:

$n - Подставляет последнюю подстроку, соответствующую группе с номером n.

Например, обрамляет все последовательности букв 'a' символами подчеркивания (например, строка "bacghghaaab" превратится в "b_a_cghgh_aaa_b"

Regex r = new Regex(@"(a+)");

string s="bacghghaaab";

s=r.Replace(s,"_$1_");

Console.WriteLine("{0}",s);

 

Можно задать третий параметр, указывающий сколько замен нужно произвести:

Regex r = new Regex(@"(dotsite)");

string s="dotsitedotsitedotsiterulez";

s=r.Replace(s,"f",1);

Console.WriteLine("{0}",s);

Если параметр не задан, то заменяются все найденные образцы.

Также можно задать четвертый параметр, указывающий с какого вхождения производить замены:

Regex r = new Regex(@"(dotsite)");

string s="dotsitedotsitedotsiterulez";

s=r.Replace(s,"f",2,1);

Console.WriteLine("{0}",s);

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: