|
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
|
|||||||||||||||||
Регулярные выражения FAQ18.02.2011, 13:09. Показов 264432. Ответов 4
Как и обещал, выкладываю свой FAQ по Regex для тех кто только начинает с ним знакомиться. По мере углубления своих знаний готов продолжить работу над ним. Если администрации он покажется полезным то можно вынести тему наверх. Надеюсь что кому-то он поможет, мне бы, во всяком случае, для старта он очень пригодился бы.
Regex FAQ. Регулярные выражения – это один из способов поиска подстрок (соответствий) в строках. Осуществляется это с помощью просмотра строки в поисках некоторого шаблона. Для того чтобы использовать Regex в своих программах необходимо в список используемых пространств имен добавить: using System.Text.RegularExpressions; Далее, в коде самой программы необходимо создать экземпляр Regex: Regex newReg = new Regex(pattern,options); Все найденные соответствия в тексте помещаются в тип MatchCollection MatchCollection matches; И далее в этот объект поместить текст, в котором необходимо произвести поиск: matches = newReg.Matches(text); В результате в matches появляются все результаты парсинга. Мы можем посмотреть сколько их (matches.Count), можем узнать значение конкретного элемента (matches[N].Value) pattern – образец или условие для поиска, например, если необходимо найти слово“не” в строке “не может быть”, то pattern для поискабудет выглядеть так: @"не". В простейшем случае, можно обойтись без условия поиска, тогда найдено будет значение точно повторяющее pattern. Можно получить как значение найденного совпадения так и их количество, как видно из примера ниже.
RegexOptions option = RegexOptions.<условие поиска>; Ниже приведены условия поиска. IgnoreCase – находит совпадения независимо от регистра, т.е. прописными или строчными буквами в строке написано слово. IgnorePatternWhitespace – устраняет из шаблона неизбежные пробелы и включает комментарии помеченные «#». Compiled – указывает что регулярное выражение скомпилировано в сборку. Это порождает более быстрое исполнение но увеличивает время запуска. CultureInvariant – указывает игнорирование региональных языковых различий. ExplicitCapture – указывает что единственные допустимые записи являются явно поименованными или пронумерованными группами в форме(?<name>…) Multiline – Многострочный режим. Изменяет значения символов “^” и“$” так что они совпадают соответственно в начале и конце каждой строки, а не только в начале и конце целой строки. RightToLeft – указывает что поиск будет выполнен справа на лево, а не слева на право. Singleline – однострочный режим. None – указывает на отсутствие заданных параметров. Пример с условиями поиска будет выглядеть так:
Используя специальные символы можно создавать более сложные шаблоны для поиска: ^ - указывает на то, что поиск должен начинаться с начала строки, например шаблон (@”^не”) найдет “не” в строке, если она начинается с него: “Не может быть совсем не может быть не”. $ -указывает на то что поиск должен производиться в конце строки, шаблон (@”не$”) найдет “не” в той же самой строке, только если она заканчивается им. {n} – указывает точное число вхождений в строку, например шаблон (@"не{2}") найдет слово “нее” в строке. {n,} – указывает число вхождений не менее n, т.е. шаблон (@"не{2,}") найдет слова “нее”, “неее” и т.д. {n,m} – указывает число вхождений-n и количество символов вхождения-m, то есть шаблон (@"не{2,4}") найдет все слова где количество букв “е” больше 2, но определит только количество букв ”е” равное 4. Т.е. в слове “нееееееееее” он найдет только “нееее”. + - Соответствует 1 или более предшествующих выражений. Например, "не+" соответствует "не" и "нее", но не соответствует "н". *- Соответствует 0 или более вхождений предшествующего выражения. Например, 'не*' соответствует "н" и "нее". ? - Соответствует 0 или 1 предшествующих выражений. Например, 'бы(ло)?' соответствует "бы" в "бы" или "было". В квадратных скобках можно указать диапазон букв или цифр для поиска, например [A-Z] или [0-9] Далее приведен пример для поиска времени в формате 00:00:00 и показана некоторая оптимизация кода.
88
|
|||||||||||||||||
| 18.02.2011, 13:09 | |
|
Ответы с готовыми решениями:
4
Регулярные выражения - вывод сообщения об ошибке при нахождении в строке выражения, начинающегося с цифры Регулярные выражения
|
|
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
|
|
| 18.02.2011, 14:02 | |
|
Надеюсь автор не будет против, но уверен что информация будет полезна для новичков, дополню тему
[abc] Любой из перечисленных в скобках символов. Используя тире можно указать диапазон символов, например, [a-f] - то же самое, что [abcdef] . [^abc] Любой символ, кроме перечисленных в скобках. \d Цифра. Эквивалентно [0-9] . \D Любой символ, кроме цифр. Эквивалентно [^0-9] . \w Цифра, буква (латинский алфавит) или знак подчеркивания. Эквивалентно [0-9a-zA-Z_] . \W Любой символ, кроме цифр, букв (латинский алфавит) и знака подчеркивания. Эквивалентно [^0-9a-zA-Z_] . \s Пробельный символ (пробел, табуляция, перевод строки и т. п.). \S Любой символ, кроме пробельных. . Любой символ, кроме перевода строки. Для поиска любого символа, включая перевод строки, можно использовать конструкцию [\s\S] . \ Экранирование. Например, символ "." является спецсимволом, если же нужно чтобы он воспринимался буквально, т. е. означал именно точку, то нужно записать так: "\." . a|b Условие "или" (a или b). Так как в данном случае с обеих сторон разделителя ровно по одному символу, то можно заменить на [ab] . (abc) Подвыражение. Соответствующий подвыражению текст запоминается отдельно от общего результата. (?:abc) Подвыражение. Соответствующий подвыражению текст не запоминается. Используется для группировки частей образца, например, /ко(?:т|шка)/ - то же самое, что /кот|кошка/. (?=abc) Поиск с "заглядыванием вперед", срабатывает если соответствие найдено. Например, /Windows (?=95|98|NT|2000)/ найдет "Windows " в строке "Windows 98", но ничего не найдет в строке "Windows 3.1". После сопоставления поиск продолжается с позиции, следующей за найденным соответствием, без учета заглядывания вперед. (?!abc) Поиск с "заглядыванием вперед", срабатывает если соответствие не найдено. Например, /Windows (?!95|98|NT|2000)/ найдет "Windows " в строке "Windows 3.1", но ничего не найдет в строке "Windows 98". После сопоставления поиск продолжается с позиции, следующей за найденным соответствием, без учета заглядывания вперед. \0 Символ NUL. \t Символ табуляции. \v Символ вертикальной табуляции. \r Символ возврата каретки. \n Символ перевода строки. \f Символ перевода формата. \b Граница слова, т. е. позиция между словом и пробелом или переводом строки. \B Любая позиция кроме границы слова. \xhh Символ с кодом hh (2 шестнадцатиричных цифры). \uhhhh Символ с кодом hh (4 шестнадцатиричных цифры).
74
|
|
|
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
|
|
| 14.03.2011, 12:39 | |
|
Классы пространства имен System.Text.RegularExpressions
Capture - Представляет результаты из отдельной записи части выраже- ния. Capture представляет одну подстроку для отдельной успешной записи. CaptureCollection - Представляет последовательность подстрок записи. CaptureCollection возвращает набор записей, сделанных одной группой записи. Group - Group представляет результаты отдельной группы записи. Группа записи может записать ноль, одну или более строк в одно совпадение из-за кванторов, таким образом Group предоставляет коллекцию объектов Capture. GroupCollection - Представляет коллекцию групп записи. GroupCollection возвращает набор групп записи в одном совпадении. Match - Представляет результаты из отдельного совпадения регулярного выражения. MatchCollection - Представляет набор успешных совпадений, обнаруженных путем итеративного применения шаблона регулярного выражения к входной строке. Regex - Представляет постоянное регулярное выражение. RegexCompilationInfo - Представляет сведения о регулярном выражении, используемые для компиляции регулярного выражения в отдельную сборку. RegexRunner - Класс RegexRunner является базовым классом для скомпилированных регулярных выражений. RegexRunnerFactory - Создает класс RegexRunner для скомпилированного регулярного выражения.
32
|
|
|
89 / 60 / 2
Регистрация: 08.03.2011
Сообщений: 546
|
|
| 30.01.2012, 11:55 | |
|
Вот еще 2 сайта для тестирования регулярок, а также разнообразные шаблоны
http://gskinner.com/RegExr/ http://regexlib.com/(A(Wcv_JS2... eSupport=1 А также табличка
25
|
|
|
38 / 41 / 0
Регистрация: 23.01.2013
Сообщений: 17
|
|
| 23.01.2013, 14:56 | |
|
Посмотрел первую и вторую ссылку для проверки регулярных выражений. Обе не понравились.
Потратил драгоценное время и накидал маленькую програмку для проверки регулярных выражений. Прикладываю вместе с исходниками кому надо. PS Програмка на C# так что все выражения что в ней работают, работают в C#
31
|
|
| 23.01.2013, 14:56 | |
|
Помогаю со студенческими работами здесь
5
Регулярные выражения в c# Регулярные выражения
Где можно почитать про регулярные выражения на русском? Регулярные выражения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|