Регулярные выражения в Си-шарп. Класс 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 – использовать поиск по умолчанию.
|