Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Работа с регулярным выражением
Для работы с регулярными выражениями необходимо пространство имен 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#
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(); // считать все из файла
}
|