русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Використання регулярних виразів у програмах.


Дата додавання: 2014-10-07; переглядів: 1264.


 

Регулярні вирази надають потужний, гнучкий і ефективний метод обробки тексту. Обширні можливості зіставлення шаблонів, що надаються регулярними виразами, дозволяють швидко аналізувати великі обсяги тексту, відшукуючи в них певні символьні шаблони, перевіряти текст на відповідність певним заздалегідь шаблонами (наприклад, формату адреси електронної пошти), витягувати, змінювати, замінювати або видаляти підрядка тексту, а також додавати витягнуті рядки в колекцію для формування звітів. Регулярні вирази - це незамінний інструмент для багатьох програм, в яких ведеться робота з рядками або аналіз об'ємних блоків тексту.

Як працюють регулярні вирази

Основа обробки тексту за допомогою регулярних виразів - це підсистема обробки регулярних виразів, представлена в платформі. NET Framework об'єктом System.Text.RegularExpressions.Regex. Мінімальний набір відомостей, який потрібно надати підсистемі обробки регулярних виразів для обробки тексту за допомогою регулярних виразів, зводиться до двох речей.

Шаблон регулярного виразу, який потрібно знайти в тексті.

У платформі. NET Framework шаблони регулярних виразів визначаються з використанням особливого синтаксису або мови, сумісного з регулярними виразами Perl 5 і володіє деякими додатковими можливостями (наприклад, він підтримує зіставлення справа наліво). Для отримання додаткової інформації див Елементи мови регулярних виразів - короткий довідник.

Текст, який потрібно проаналізувати за допомогою шаблону регулярного виразу.

Методи класу Regex дозволяють виконувати наступні дії:

Визначити, чи зустрічається у вхідному тексті шаблон регулярного виразу, можна шляхом виклику методу IsMatch. Приклад використання методу IsMatch для перевірки тексту див Практичний посібник. Перевірка рядків на відповідність формату електронної пошти.

Витягти з тексту одне або всі входження, відповідні шаблоном регулярного виразу, можна шляхом виклику методу Match або Matches. Перший метод повертає об'єкт Match, надає відомості про збіг в тексті. Другий метод повертає колекцію MatchCollection, до якої входять об'єкти Match для всіх збігів, знайдених в проаналізованому тексті.

Замінити текст, відповідний шаблоном регулярного виразу, можна шляхом виклику методу Replace. Приклади використання методу Replace для зміни формату дати і видалення неприпустимих символів з рядка см. в розділах Практичний посібник. Виняток неприпустимих символів з рядка і Приклад. Зміна форматів дати.

Загальні відомості про об'єктної моделі регулярних виразів див Об'єктна модель регулярних виразів.

Приклади регулярних виразів

У класі String є ряд працюючих з рядками методів пошуку і заміни, які можна використовувати для пошуку рядків-літералів в більш великих рядках. Регулярні вирази найбільш корисні, якщо потрібно знайти в крупній рядку одну або кілька подстрок або виявити шаблони в рядку, як показано в наступних прикладах.

hs600312.collapse_all (ru-ru, VS.110). gifПрімер 1. Заміна подстрок

Припустимо, список розсилки містить записи, в яких, крім імені та прізвища, може вказуватися звернення ("Mr.", "Mrs.", "Miss" або "Ms."). Якщо при створенні міток для конвертів по такому списку вказувати звернення не потрібно, можна використовувати для видалення звернень регулярний вираз, як показано в наступному прикладі.

using System;

using System.Text.RegularExpressions;

 

public class Example

{

public static void Main()

{

string pattern = "(Mr\\.? |Mrs\\.? |Miss |Ms\\.? )";

string[] names = { "Mr. Henry Hunt", "Ms. Sara Samuels",

"Abraham Adams", "Ms. Nicole Norris" };

foreach (string name in names)

Console.WriteLine(Regex.Replace(name, pattern, String.Empty));

}

}

Шаблон регулярного виразу (Mr \.? | Mrs \.? | Miss | Ms \.?) Збігається з будь-яким входженням "Mr", "Mr.", "Mrs", "Mrs.", "Miss", "Ms або "Ms. ". Виклик методу Regex.Replace призведе до заміни знайдених при зіставленні подстрок на String.Empty; іншими словами, знайдений підрядок видаляється з вихідної рядка.

hs600312.collapse_all (ru-ru, VS.110). gif

Приклад 2. Визначення повторюваних слів

Випадкове повторення слів - часта помилка письменників. Для виявлення повторюваних слів можна використовувати регулярний вираз, як показано в наступному прикладі.

using System;

using System.Text.RegularExpressions;

 

public class Class1

{

public static void Main()

{

string pattern = @"\b(\w+?)\s\1\b";

string input = "This this is a nice day. What about this? This tastes good. I saw a a dog.";

foreach (Match match in Regex.Matches(input, pattern, RegexOptions.IgnoreCase))

Console.WriteLine("{0} (duplicates '{1}') at position {2}",

match.Value, match.Groups[1].Value, match.Index);

}

}

При виклику методу Regex.Matches параметри регулярного виразу задані як RegexOptions.IgnoreCase. Це означає, що операція зіставлення не враховуватиме регістр і код в прикладі буде вважати підрядок "This this" повторюваної.

Зверніть увагу, що вхідні рядок містить підрядок "this? This". Проте через розділяє знака пунктуації повторенням це не вважається.

hs600312.collapse_all (ru-ru, VS.110). gif

Приклад 3. Динамічне побудова регулярного виразу, що враховує мова і регіональні параметри.

У наступному прикладі демонструється міць регулярних виразів у поєднанні з гнучкістю, яка забезпечується компонентами глобалізації платформи. NET Framework. У прикладі об'єкт NumberFormatInfo використовується з метою визначення формату значень валюти для поточної мови і регіональних параметрів. Потім отримані відомості використовуються для динамічного формування регулярного виразу, що виділяє в тексті значення валюти. Для кожного збігу виділяється підгрупа, яка містить числову рядок, яка потім перетвориться в значення типу Decimal, після чого обчислюється наростаючий підсумок.

using System;

using System.Collections.Generic;

using System.Globalization;

using System.Text.RegularExpressions;

 

public class Example

{

public static void Main()

{

// Define text to be parsed.

string input = "Office expenses on 2/13/2008:\n" +

"Paper (500 sheets) $3.95\n" +

"Pencils (box of 10) $1.00\n" +

"Pens (box of 10) $4.49\n" +

"Erasers $2.19\n" +

"Ink jet printer $69.95\n\n" +

"Total Expenses $ 81.58\n";

 

// Get current culture's NumberFormatInfo object.

NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat;

// Assign needed property values to variables.

string currencySymbol = nfi.CurrencySymbol;

bool symbolPrecedesIfPositive = nfi.CurrencyPositivePattern % 2 == 0;

string groupSeparator = nfi.CurrencyGroupSeparator;

string decimalSeparator = nfi.CurrencyDecimalSeparator;

 

// Form regular expression pattern.

string pattern = Regex.Escape( symbolPrecedesIfPositive ? currencySymbol : "") +

@"\s*[-+]?" + "([0-9]{0,3}(" + groupSeparator + "[0-9]{3})*(" +

Regex.Escape(decimalSeparator) + "[0-9]+)?)" +

(! symbolPrecedesIfPositive ? currencySymbol : "");

Console.WriteLine( "The regular expression pattern is:");

Console.WriteLine(" " + pattern);

 

// Get text that matches regular expression pattern.

MatchCollection matches = Regex.Matches(input, pattern,

RegexOptions.IgnorePatternWhitespace);

Console.WriteLine("Found {0} matches.", matches.Count);

 

// Get numeric string, convert it to a value, and add it to List object.

List<decimal> expenses = new List<Decimal>();

 

foreach (Match match in matches)

expenses.Add(Decimal.Parse(match.Groups[1].Value));

 

// Determine whether total is present and if present, whether it is correct.

decimal total = 0;

foreach (decimal value in expenses)

total += value;

 

if (total / 2 == expenses[expenses.Count - 1])

Console.WriteLine("The expenses total {0:C2}.", expenses[expenses.Count - 1]);

else

Console.WriteLine("The expenses total {0:C2}.", total);

}

}

// The example displays the following output:

// The regular expression pattern is:

// \$\s*[-+]?([0-9]{0,3}(,[0-9]{3})*\.?[0-9]+)

// Found 6 matches.

// The expenses total $81.58.

 


Лекція №12

Тема: Використання зовнішніх модулів у програмних продуктів.

Мета: Придбати знання та практичні навички у використанні зовнішніх модулів при розробці вланих програм.

Перелік питань, що розглядаються на лекції:

1. Призначення зовнішніх компонентів

2. Установка й видалення зовнішніх компонентів

3. Установка й видалення бібліотек компонентів

4. Запуск зовнішніх програм і файлів

 


<== попередня лекція | наступна лекція ==>
Параметри регулярних виразів | Призначення зовнішніх компонентів


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн