Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Работа с регулярным выражением






Для работы с регулярными выражениями необходимо пространство имен System.Text.RegularExpression.

После создания шаблона регулярного выражения с ним можно осуществить различные действия, в зависимости от того, что вам необходимо. Можно просто проверить, существует ли текст, соответствующий шаблону, в исходной строке. Для этого нужно использовать метод IsMatch(), который возвращает логическое значение:

// Массив тестируемых строк

string[] test = {

" Wuck World", " Hello world", " My wonderful world"

};

 

// Проверим, содержится ли в исходных строках слово World

// при этом мы не укажем опции RegexOption

Regex regex = new Regex(" World");

 

Console.WriteLine(" Регистрозависимый поиск: ");

foreach (string str in test)

{

if (regex.IsMatch(str))

Console.WriteLine(" В исходной строке: \" {0}\" есть совпадения! ", str);

}

Console.WriteLine();

 

// Теперь укажем поиск, не зависимый от регистра

regex = new Regex(" World", RegexOptions.IgnoreCase);

 

Console.WriteLine(" РегистроНЕзависимый поиск: ");

foreach (string str in test)

{

if (regex.IsMatch(str))

Console.WriteLine(" В исходной строке: \" {0}\" есть совпадения! ", str);

}

 

Если нужно вернуть найденное соответствие из исходной строки, то можно воспользоваться методом Match(), который возвращает объект класса Match, содержащий сведения о первой подстроке, которая сопоставлена шаблону регулярного выражения. В этом классе имеется свойство Success, которое возвращает значение true, если найдено следующее совпадение, которое можно получить с помощью вызова метода Match.NextMatch(). Эти вызовы метода можно продолжать пока свойство Match.Success не вернет значение false. Например:

string input = " Добро пожаловать в наш магазин, вот наши цены: " +

" 1 кг. яблок - 20 руб. " +

" 2 кг. апельсинов - 30 руб. " +

" 0.5 кг. орехов - 50 руб.";

 

string pattern = @" \b(\d+\W? руб)";

Regex regex = new Regex(pattern);

 

// Получаем совпадения в экземпляре класса Match

Match match = regex.Match(input);

 

// отображаем все совпадения

while (match.Success)

{

// Т.к. мы выделили в шаблоне одну группу (одни круглые скобки),

// ссылаемся на найденное значение через свойство Groups класса Match

Console.WriteLine(match.Groups[1].Value);

 

// Переходим к следующему совпадению

match = match.NextMatch();

}

Извлечь все совпадения можно и более простым способом, используя метод Regex.Matches(), который возвращает объект класса MatchCollection, который, в свою очередь, содержит сведения обо всех совпадениях, которые обработчик регулярных выражений находит во входной строке. Например, предыдущий пример может быть переписан для вызова метода Matches вместо метода Match и метода NextMatch:

// Допустим в исходной строке нужно найти все числа,

// соответствующие стоимости продукта

string input = " Добро пожаловать в наш магазин, вот наши цены: " +

" 1 кг. яблок - 20 руб. " +

" 2 кг. апельсинов - 30 руб. " +

" 0.5 кг. орехов - 50 руб.";

 

string pattern = @" \b(\d+\W? руб)";

Regex regex = new Regex(pattern);

 

// Достигаем того же результата что и в предыдущем примере,

// используя метод Regex.Matches() возвращающий MatchCollection

foreach (Match match in regex.Matches(input))

{

Console.WriteLine(match.Groups[1].Value);

}

Наконец, можно не просто извлекать совпадения в исходной строке, но и заменять их на собственные значения. Для этого используется метод Regex.Replace(). В качестве замены методу Replace() можно передавать как строку, так и шаблон замены. В следующей таблице показано как формируются метасимволы для замены:

 

Метасимволы замены в регулярных выражениях C#

Символ Описание Пример шаблона Пример шаблона замены Результат (входная -> результирующая строки)
$ number Замещает часть строки, соответствующую группе number \b(\w+)(\s)(\w+)\b $3$2$1 " один два" -> " два один"
$$ Подставляет литерал " $" \b(\d+)\s? USD $$$1 " 103 USD" -> " $103"
$& Замещает копией полного соответствия (\$*(\d*(\.+\d+)?){1}) **$& " $1.30" -> " **$1.30**"
$` Замещает весь текст входной строки до соответствия B+ $` " AABBCC" -> " AAAACC"
$' Замещает весь текст входной строки после соответствия B+ $' " AABBCC" -> " AACCCC"
$+ Замещает последнюю захваченную группу B+(C+) $+ " AABBCCDD" -> " AACCDD"
$_ Замещает всю входную строку B+ $_ " AABBCC" -> " AAAABBCCCC"

 

string input = " Добро пожаловать в наш магазин, вот наши цены: \n" +

" \t 1 кг. яблок - 20 руб. \n" +

" \t 2 кг. апельсинов - 30 руб. \n" +

" \t 0.5 кг. орехов - 50 руб. \n";

 

Console.WriteLine(" Исходная строка: \n {0}", input);

 

// В шаблоне используются 2 группы

string pattern = @" \b(\d+)\W? (руб.)";

 

// Строка замены " руб." на " $"

string replacement1 = " $$$1"; // Перед первой группой ставится знак $,

// вторая группа удаляется без замены

 

input = Regex.Replace(input, pattern, replacement1);

Console.WriteLine(" \nВидоизмененная строка: \n" +input);

 

Код загрузки предложения из текстового файла

Для загрузки данных из файла используется пространство имен System.IO;

using(StreamReader sr = new StreamReader(" text.txt"))//имя файла

{

string AllTextInFile = sr.ReadToEnd(); // считать все из файла

 

}


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.009 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал