Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Регулярные выражения в Си-шарп. Класс Regex



Регулярное выражение – это некий шаблон, составленный из символов и спецсимволов, который позволяет находить подстроки соответствующие этому шаблону в других строках. Спецсимволов и различных правил их комбинирования есть очень много, поэтому регулярные выражения можно даже назвать таким себе отдельным языком программирования. Те, кто пользовался поиском по файлам в Windows могут знать, что для того чтобы найти файлы только заданного расширения, задается шаблон типа «*.txt». Здесь «*» - спецсимвол, который означает любые имена файлов. Так вот регулярные выражения предоставляют подобный механизм.

Что можно делать, используя регулярные выражения
Регулярные выражения предоставляют массу возможностей, некоторые из них:
- заменять в строке все одинаковые слова другим словом, или удалять такие слова;
- выделять из строки необходимую часть.

- проверять соответствует ли строка заданному шаблону. Например, проверять, правильно ли введен email, телефон т.д.;
- проверять, содержит ли строка заданную подстроку;
- извлекать из строки все вхождения подстрок, соответствующие шаблону регулярного выражения.

Начало работы с регулярными выражениями
Для того, чтобы работать с регулярными выражениями необходимо подключить в начале программы пространство имен using System.Text.RegularExpressions;В Си-шарп работу с регулярными выражениями предоставляет класс Regex. Создание регулярного выражения имеет следующий вид:

Regex myReg = new Regex([шаблон]);
Здесь [шаблон] – это строка содержащая символы и спецсимволы.

Методы класса Regex
IsMatch – проверяет содержит ли строка хотя бы одну подстроку соответствующую шаблону регулярного выражения. Работа этого метода показана в примере выше.

Match – возвращает первую подстроку, соответствующую шаблону, в виде объекта класса Match. Класс Match предоставляет различную информацию о подстроке – длину, индекс, само значение и другое.

Matches – возвращает все подстроки соответствующие шаблону в виде коллекции типа MatchCollection.

Replace – возвращает строку, в которой заменены все подстроки, соответствующие шаблону, новой строкой
Split - возвращает массив строк, полученный в результате разделения входящей строки в местах соответствия шаблону регулярного выражения

Специальные символы
Классы символов

Обозначение Описание Шаблон Соответствие
[группа_символов] Любой из перечисленных в скобках символов. Используя тире можно указать диапазон символов, например, [a-f] - то же самое, что [abcdef] [abc] «a» в «and»
[^группа_символов] Любой символ, кроме перечисленных в скобках [^abc] «n», «d» в «and»
\d Цифра. Эквивалентно [0-9] \d «1» в «data1»
\D Любой символ, кроме цифр. Эквивалентно [^0-9] \D «y» в «2014y»
\w Цифра, буква (латинский алфавит) или знак подчеркивания. Эквивалентно [0-9a-zA-Z_] \w «1», «5», «с» в «1.5с»
\W Любой символ, кроме цифр, букв (латинский алфавит) и знака подчеркивания. Эквивалентно [^0-9a-zA-Z_] \W «.» в «1.5с»
\s Пробельный символ (пробел, табуляция, перевод строки и т. п.) \s « » в «c sharp»
\S Любой символ, кроме пробельных \S «c» «s» «h» «a» «r» «p» в «c sharp»
. Любой символ, кроме перевода строки. Для поиска любого символа, включая перевод строки, можно использовать конструкцию [\s\S] c.harp «csharp» в «mycsharp»


Символы повторения

Обозначение Описание Шаблон Соответствие
* Соответствует предыдущему элементу ноль или более раз \d*. «a», «1b», «23c » в «a1b23c»
+ Соответствует предыдущему элементу один или более раз \d+. «1b», «23c » в «a1b23c»
? Соответствует предыдущему элементу ноль или один раз \d?\D «a», «1b», «3с» в «a1b23c»
{n} Соответствует предыдущему элементу, который повторяется ровно n раз \d{2} «43», «54», «82» в «2,43,546,82»
{n,} Соответствует предыдущему элементу, который повторяется минимум n раз \d{2,} «43», «546», «82» в «2,43,546,82»
{n,m} Соответствует предыдущему элементу, который повторяется минимум n раз и максимум m \d{2,} «43», «546», «821» в «2,43,546,8212»


Символы привязки

Обозначение Описание Шаблон Соответствие
^ Соответствие должно находиться в начале строки ^\d{2} «32» в «32,43,54»
$ Соответствие должно находиться в конце строки или до символа \n при многострочном поиске \d{2}$ «54» в «32,43,54»
\b Соответствие должно находиться на границе алфавитно-цифрового символа (\w) и не алфавитно-цифрового (\W) \b\d{2} «32», «54» в «32 a43 54»
\B Соответствие не должно находиться на границе \B\d{2} «43» в «32 a43 54»
\G Соответствие должно находиться на позиции конца предыдущего соответствия \G\d «3», «2», «4» в «324.758»


Символы выбора

Обозначение Описание Шаблон Соответствие
| Работает как логическое «ИЛИ» - соответствует первому и/или второму шаблону one|two «one», «two» в «one two three»
(группа_символов) Группирует набор символов в единое целое для которого дальше могут использоваться + * ? и т.д. Каждой такой группе назначается порядковый номер слева направо начиная с 1. По этому номеру можно ссылаться на группу \номер_группы (one)\1 «oneone» в «oneone onetwoone»
(?:группа_символов) Та же группировка только без назначения номера группы (?:one){2} «oneone» в «oneone onetwoone»


Другие символы

Обозначение Описание Шаблон Соответствие
\t Символ табуляции \t  
\v Символ вертикальной табуляции \v  
\r Символ возврата каретки \r  
\n Символ перевода строки \n  
\f Символ перевода страницы \f  
\ Символ, который позволяет экранировать специальные символы, чтобы те воспринимались буквально. Например, чтобы было соответствие символу звёздочки, шаблон будет выглядеть так \* \d\.\d «1.1», «1.2» в «1.1 1.2»

 

Параметры поиска
Здесь мы поговорим о втором конструкторе Regex, который принимает в качестве второго аргумента значение перечисления RegexOptions. В этом перечисление есть следующие значения:

IgnoreCase – игнорирование регистра при поиске. Находит соответствия независимо прописными или строчными буквами в строке написано слово;
RightToLeft – поиск будет выполнен справа налево, а не слева направо;
Multiline – многострочный режим поиска. Меняет работу спецсимволов «^» и «$» так, что они соответствуют началу и концу каждой строки, а не только началу и концу целой строки;
Singleline – однострочный режим поиска;
CultureInvariant - игнорирование национальных установок строки;
ExplicitCapture – обеспечивается поиск только буквальных соответствий;
Compiled – регулярное выражение компилируется в сборку, что делает более быстрым его исполнение но увеличивает время запуска;
IgnorePatternWhitespace – игнорирует в шаблоне все неэкранированные пробелы. С этим параметром шаблон «a b» будет аналогичным шаблону «ab»;
None – использовать поиск по умолчанию.

 


Поделиться:



Последнее изменение этой страницы: 2019-03-22; Просмотров: 281; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.014 с.)
Главная | Случайная страница | Обратная связь