C использование regex: Введение в регулярные выражения в современном C++ / Хабр

c — Какие есть регулярные выражения в Си?

Задать вопрос

Вопрос задан

Изменён 10 лет 4 месяца назад

Просмотрен 10k раза

Здравствуйте!

В переменной есть текст, в котором нужно найти информацию. Я планирую это сделать с помощью регулярных выражений. Столкнулся с проблемой при написании на Си. Заголовочный файл <regex.h> в MS VS 2010 отсутствует, есть файл <regex>, но работать с ним нельзя, так как он предназначен для C++, а я пишу на C(Си).

Подскажите, есть какая-то альтернативная библиотека/заголовочный файл или способ установки файла <regex.h> в VS?

Спасибо!

PS Я так уперто пишу на Си, так как хочу перейти потом на objective-c.

Или можно спокойно переходить на C++, так как это не повлечёт проблем при написании на objective-c? Или я ошибаюсь?

ЗЗЫ Уважаемый @ХэшКод, подскажите, пожалуйста, почему у меня пропала кнопка «добавить комментарий» — я не могу ответить на вопросы?

  • c
  • регулярные-выражения

11

Кроссплатформенный подход — это использовать PRCE.

В стандарте ANSI C нет регулярных выражений. В GCC есть поддержка регулярных выражений: Regular Expression Matching — это тот regex.h, который был упомянут. В Visual C++ при необходимости работы с регулярными выражениями подключают CAtlRegExp (код выносят в исходник на C++).

8

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Регулярные выражения для Python c использование openpyxl

Вопрос задан

Изменён 1 год 5 месяцев назад

Просмотрен 82 раза

Написал скрипт для сбора логов СХД NetApp:

import openpyxl
import subprocess
import os
import datetime
import re
time = datetime. datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
path_to_SMCIPMItool = 'C:/Program Files/StorageManager/client/SMcli.exe'
wb = openpyxl.reader.excel.load_workbook(filename='D:/PythonScritps/NetApp-SN.xlsx')
ws = wb.active
def log_collector():
    while True:
        sanName = input('Enter the name of storage system in 07-06 format: ')
        for row in ws.rows:
            for cell in row:
                if cell.value == sanName:
                    storage_name = str(ws.cell(row=cell.row, column=1).value)
                    storage_rack = ws.cell(row=cell.row, column=2).value
                    storage_sn_depo = ws.cell(row=cell.row, column=3).value
                    storage_sn_manufactur = ws.cell(row=cell.row, column=4).value
                    storage_unit = ws.cell(row=cell.row, column=5).value
                    print('Serial number of ' + storage_name + ' is ' + storage_sn_depo + ' and serial number of Netapp ' + storage_sn_manufactur)
                    print(storage_name + ' is installed in the rack ' + storage_rack + ' and unite ' + storage_unit)
                    return storage_name
        else:
            cell.
value != sanName print('not found this storage, try again')

В функции идёт обращение к Excel файлу, который имеет в первой колонке имена СХД (например ST13-06-b) и вторая колонка (например 13-06). Когда пользователь через input вводит 13-06, через 2 цикла for проходится по Excel файлу, и если выполняется условие if cell.vallue == sanName (вторая колонка Excel файла (cell.vallue) == 13-06(input) вытаскивает нужные значения из каждой ячейки. Мне пришлось вводить эту доп колонку с такими названиями(13-06 и т.д), но это немного читерство. Я бы хотел использовать регулярные выражение для поиска, вводя 13-06, а находил значение в ячейке ST13-06-b.

И вот что получается на выходе скрипта:

Enter the name of storage system in 07-06 format: 13-06
Serial number of ST13-06-b is xxxxxx and serial number of Netapp xxxxxxx
ST13-06-b is installed in the rack Стойка xxxxx and unite xxxxx

Приведу ниже пример отдельного кода как я пытался играться с регулярными выражениям и вот что получилось.

import re
txt = 'ST13-03-b'
look = r"[\w-]+"
all = re.findall(look,txt)
print(all)

Подойдёт ли это составленное регулярное выражение и можно ли его использовать при поиске ячеек в Excel и как правильно это сделать?

  • python
  • python-3.x
  • excel
  • анализ-данных
  • обработка-данных

7

Воспользуйтесь модулем Pandas.

Рабочий пример (используем Single-responsibility Principle):

import re
import pandas as pd
from pathlib import Path
from typing import Union, Dict
def parse_log_to_df(filename: Union[str, Path], **kwargs) -> pd.DataFrame:
    return pd.read_excel(filename, **kwargs)
def find_log_entry(
        df: pd.DataFrame,
        san_regex: Union[str, re.Pattern],
        search_col: str = "Name"
) -> Dict[str, str]:
    res = df.loc[df[search_col].str.contains(san_regex)]
    if res.empty:
        return None
    res = res.
iloc[0].to_dict() return res def build_report(df: pd.DataFrame, san_regex: Union[str, re.Pattern]) -> str: r = find_log_entry(df, san_regex) if not r: return None res = (f'Serial number of {r.get("Name")} is {r.get("SN_DEPO")} ' f'and serial number of Netapp {r.get("manufactur")}\n' f'{r.get("Name")} is installed in the rack {r.get("Rack")}' f' and unit {r.get("Unit")}') return res df = parse_log_to_df(filename) san_regex = "06-03" print(build_report(df, san_regex)) # Serial number of ST06-03-b is xxxxx and serial number of Netapp xxxxx # ST06-03-b is installed in the rack xxxxx and unit xxxxx print(build_report(df, san_regex=r"01.*-g$")) # Serial number of ST01-03-g is xxxxx and serial number of Netapp xxxxx # ST01-03-g is installed in the rack xxxxx and unit xxxxx

2

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Примеры исходного кода для наших учебных модулей

Обучение, языки программирования с открытым исходным кодом

  • Python •
    • Обучение программированию на Python
    • Программирование на Python
    • Специальные предметы/курсы Python
  • Ткл •
    • Обучение программированию на Tcl
    • Tcl-программирование
    • Специальные предметы Tcl, Expect, Tk / курсы
  • Луа •
    • Обучение программированию на Lua
    • Программирование на языке Lua
    • Специальные предметы/курсы Lua
  • С и С++
    • Обучение программированию на C и C++
    • Программирование на C и C++
    • Другие предметы/курсы C и C++
  • Рубин •
    • Обучение программированию на Ruby
    • Рубиновое программирование
    • Специальные темы/курсы Ruby, Rails
  • PHP •
    • Обучение программированию на PHP
    • PHP-программирование
    • Специальные предметы/курсы PHP
  • Перл •
    • Обучение программированию на Perl
    • Программирование на Perl
    • Специальные предметы/курсы Perl

Страница для печати

 
На 2021 год — онлайн-обучение Python 3 — см. ((здесь)).

Мы планировали выйти на пенсию летом 2020 года и увидеть мир, но Коронавирус привел нас к большому количеству блокировок в программировании на Python 3 и PHP 7.
Теперь мы можем предложить индивидуальное онлайн-обучение — небольшие группы, настоящие преподаватели — действительно работает хорошо для групп от 4 до 14 делегатов. В любой точке мира; язык курса английский.

Спросите о частном обучении по Python 2, Tcl, Perl, PHP, Lua и т. д.
 • Если вы продолжите, мы будем считать это вашим согласием на прием файлов cookie
 

Примеры исходного кода для наших обучающих модулей

Компоненты веб-решения, пример из учебного курса Well House Consultants
Подробнее о компонентах веб-решения [ссылка]

Исходный код: examples.txt Модуль: A100

Эта страница является только примером — вы запустили скрипт «Исходный код
пример» на веб-сайте Well House Consultants, но
вы не сказали нам, какой пример вы хочу. Пожалуйста, следуйте
по предоставленным ссылкам, чтобы найти конкретный пример
, который вы ищете.

Узнайте об этом

Этот пример рассматривается в следующих общедоступных курсах:
 * Развертывание LAMP — Linux, Apache, MySQL, Perl/PHP
 * Основы Linux
 * Развертывание приложений Java в Linux/Unix
 * %xw%
и полностью описано в курсе или в печатном руководстве по курсу.

Книги по этой теме

Да. В нашей библиотеке более 700 книг. Книги охватывающие развертывание лампы, перечислены здесь, и если вы выбрали соответствующую книгу, мы свяжем вас с Amazon для заказа.

Другие примеры

Этот пример взят из нашего учебного модуля «Компоненты веб-решения». Вы найдете описание темы и некоторые другие тесно связанные примеры на индексной странице модуля «Компоненты веб-решения».

Полное описание исходного кода

Вы можете узнать больше об этом примере на обучающих курсах, перечисленных на этой странице, на котором вам будет предоставлен полный набор учебных заметок.

Многие другие учебные модули доступны для загрузки (для ограниченного использования) с наш центр загрузки под Лицензия Open Training Notes.

Прочие ресурсы

• Наш центр решений предлагает ряд более объемных технических статей.
• Наш архив форума Opentalk содержит центр вопросов и ответов.
• Лошадиный рот дает ежедневный совет или мысль.
• Дополнительные ресурсы доступны через ресурсный центр.
• Все эти ресурсы можно найти через нашу поисковую систему.
• И здесь есть глобальный индекс.

Цель этого веб-сайта

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

Автор веб-сайта

Этот веб-сайт написан и поддерживается Консультанты Уэлл Хаус.

Условия использования

Бывшие участники наших учебных курсов могут использовать индивидуальные примеры в процессе их программирования, но должны проверять примеры, которые они используют, чтобы убедиться, что они подходят для их работа. Помните, что некоторые из наших примеров показывают, как делать , а не . вещи — проверяйте в своих заметках. Консультанты Well House не несут ответственности для соответствия этих примеров программ потребностям клиентов.

Авторское право на эту программу принадлежит Well House Consultants Ltd. запрещено использовать его для проведения собственных учебных курсов без нашего предварительного письменного разрешения. Смотрите наши страницу о предоставлении учебных курсов для более подробной информации.

Любое из наших изображений в этом коде НЕ МОЖЕТ быть повторно использовано на общедоступном URL-адресе без нашего предварительное разрешение. Для личного использования добросовестно мы часто предоставляем вам разрешение что вы предоставляете обратную ссылку. При коммерческом использовании на веб-сайте взимается лицензионный сбор за каждое используемое изображение — подробности по запросу.


Вы можете добавить комментарий или рейтинг на эту страницу


© ВЕЛЛ ХАУС КОНСАЛТАНТС ЛТД., 2022: 48 Spa Road • Мелкшем, Уилтшир • Великобритания • SN12 7NY
PH: 01144 1225 708225 • ЭЛЕКТРОННАЯ ПОЧТА: [email protected] • ВЕБ-САЙТ: http://www.wellho.net • SKYPE: wellho

СТРАНИЦА: http://www.wellho.net/resources/ex.php?item=c206/reg2.c • СТРАНИЦА СОЗДАН: Вс, 11 октября 14:50:09 2020 • СТРОИТЕЛЬНАЯ СИСТЕМА: JelliaJamb

Язык регулярных выражений — краткий справочник

  • Статья
  • 12 минут на чтение

Регулярное выражение — это шаблон, которому механизм регулярных выражений пытается сопоставить входной текст. Шаблон состоит из одного или нескольких символьных литералов, операторов или конструкций. Краткое введение см. в разделе Регулярные выражения .NET.

В каждом разделе этого краткого справочника перечислены определенные категории символов, операторов и конструкций, которые можно использовать для определения регулярных выражений.

Мы также предоставили эту информацию в двух форматах, которые вы можете скачать и распечатать для удобства:

  • Скачать в формате Word (.docx)
  • Скачать в формате PDF (.pdf)

Экранирование символов

Символ обратной косой черты (\) в регулярном выражении указывает, что символ, следующий за ним, либо является специальным символом (как показано в следующей таблице), либо должен интерпретироваться буквально. Дополнительные сведения см. в разделе Экранирование символов.

Экранированный символ Описание Узор совпадений
Соответствует символу колокольчика, \u0007. \ "\u0007" в "Ошибка!" + '\ u0007'
В классе символов соответствует символу возврата, \u0008. [\b]{3,} "\b\b\b\b" в "\b\b\b\b"
Соответствует вкладке, \u0009. (\w+)\t "item1\t" , "item2\t" в "item1\titem2\t"
Соответствует возврату каретки, \u000D. ( \r не эквивалентен символу новой строки, \n .) \r\n(\w+) "\r\nЭти" в "\r\nЭто\nдве строки."
\v Соответствует вертикальной вкладке, \u000B. [\v]{2,} "\v\v\v" в "\v\v\v"
Соответствует переводу страницы, \u000C. [\f]{2,} "\f\f\f" в "\f\f\f"
\n Соответствует новой строке, \u000A. \r\n(\w+) "\r\nЭти" в "\r\nЭти\nдве строки."
Соответствует побегу, \u001B. "\x001B" в "\x001B"
\ ннн Использует восьмеричное представление для указания символа ( nnn состоит из двух или трех цифр). \ш\040\ш "a b" , "c d" в "a bc d"
нн Использует шестнадцатеричное представление для указания символа ( nn состоит ровно из двух цифр). \ш\х20\ш "a b" , "c d" в "a bc d"
\c X

\c x

Соответствует управляющему символу ASCII, который указан как X или x , где X или x — это буква управляющего символа. \кС "\x0003" в "\x0003" (Ctrl-C)
нннн Соответствует символу Unicode, используя шестнадцатеричное представление (ровно четыре цифры, представленные nnnn ). \w\u0020\w "a b" , "c d" в "a bc d"
\ Если за ним следует символ, который не распознается как escape-символ в этой и других таблицах этого раздела, соответствует этому символу. Например, \* совпадает с \x2A и \. совпадает с \x2E . Это позволяет обработчику регулярных выражений устранять неоднозначность языковых элементов (таких как * или ?) и символьных литералов (представленных \* или \? ). \d+[\+-x\*]\d+ "2+2" и "3*9" в "(2+2) * 3*9"

Классы символов

Класс символов соответствует любому из набора символов. Классы символов включают языковые элементы, перечисленные в следующей таблице. Дополнительные сведения см. в разделе Классы символов.

9ай]
Класс символов Описание "р" , "г" , "н" в "царствование"
[ первый - последний ] Диапазон символов: соответствует любому одиночному символу в диапазоне от первых до последних . [А-Я] "А" , "В" в "AB123"
. Подстановочный знак: соответствует любому одиночному символу, кроме \n .

Чтобы соответствовать литеральному символу точки (. или \u002E ), перед ним должен быть escape-символ ( \. ).

до "авеню" в "ступицу"

"ели" в "воду"

\p{ имя } Соответствует любому одиночному символу в общей категории Unicode или именованному блоку, указанному в имя . \p{Lu}

\p{IsCyrillic}

"C" , "L" в "City Lights"

"Д" , "Ж" в "ДЖем"

\P{ имя } Соответствует любому одиночному символу, не входящему в общую категорию Unicode или именованный блок, заданный name . \P{Лу}

\P{IsCyrillic}

"и" , "т" , "у" в "Город"

"е" , "м" в "Д180"

Соответствует любому символу слова. "I" , "D" , "A" , "1" , "3" в "ID A1.3"
Соответствует любому символу, не являющемуся словом. \Вт "" , "." в "ID A1.3"
Соответствует любому символу пробела. "D" в "ID A1.3"
Соответствует любому символу, отличному от пробела. \с\с "_" в "int __ctr"
Соответствует любой десятичной цифре. "4" в "4 = IV"
Соответствует любому символу, кроме десятичной цифры. "" , "=" , "" , "I" , "V" в "4 = IV"

Якоря

Якоря, или атомарные утверждения нулевой ширины, приводят к успешному или неудачному совпадению в зависимости от текущей позиции в строке, но они не заставляют движок продвигаться по строке или потреблять символы. Метасимволы, перечисленные в следующей таблице, являются якорями. Дополнительные сведения см. в разделе Якоря.

Утверждение Описание Узор совпадений
\д{3} "901" в "901-333-"
$ По умолчанию совпадение должно находиться в конце строки или перед \n в конце строки; в многострочном режиме он должен располагаться до конца строки или до \n в конце строки. -\d{3}$ "-333" в "-901-333"
Совпадение должно находиться в начале строки. \А\д{3} "901" в "901-333-"
Совпадение должно находиться в конце строки или перед \n в конце строки. -\d{3}\Z "-333" в "-901-333"
Совпадение должно находиться в конце строки. -\d{3}\z "-333" в "-901-333"
Совпадение должно произойти в точке, где закончилось предыдущее совпадение, или, если предыдущего совпадения не было, в позиции в строке, где началось сопоставление. \Г\(\д\) "(1)" , "(3)" , "(5)" в "(1)(3)(5)[7](9)"
Совпадение должно происходить на границе между \w (буквенно-цифровой) и \W (не буквенно-цифровой). \b\w+\s\w+\b "тема их" , "тема их" в "тема их их"
Совпадение не должно происходить на границе \b . \Изгиб\w*\b "концы" , "конец" в "конец посылает терпит кредитора"

Конструкции группировки

Конструкции группировки очерчивают подвыражения регулярного выражения и обычно захватывают подстроки входной строки. Группирующие конструкции включают языковые элементы, перечисленные в следующей таблице. Дополнительные сведения см. в разделе Конструкции группировки.

Группирующая конструкция Описание Узор совпадений
( подвыражение ) Захватывает совпавшее подвыражение и присваивает ему порядковый номер, отсчитываемый от единицы. (\ш)\1 "ее" в "глубокий"
(? < Имя > Субэкспрессия )
или
(? ' Имя 9042 (?' Имя 9042 (? ' . )
Захватывает совпавшее подвыражение в именованную группу. (?<двойной>\w)\k<двойной> "ее" в "глубокий"
(?< name1 - name2 > subexpression )
or
(?' name1 - name2 ' subexpression 9((1-3)*(3-1))"
(?: подвыражение ) Определяет незахватываемую группу. Запись(?:Строка)? "WriteLine" в "Console.WriteLine()"

"Write" в "Console.Write(значение)"

(?imnsx-imnsx: подвыражение ) Применяет или отключает указанные параметры в течение подвыражение . Дополнительные сведения см. в разделе Параметры регулярных выражений. А\d{2}(?i:\w+)\b "A12xl" , "A12XL" в "A12xl A12XL a12xl"
(?= подвыражение ) Утверждение положительного просмотра вперед нулевой ширины. \b\w+\b(?=.+и.+) "кошки" , "собаки"
в
"кошки, собаки и некоторые мыши".
(?! подвыражение ) Утверждение отрицательного просмотра вперед нулевой ширины. \b\w+\b(?!.+и.+) "и" , "некоторые" , "мыши"
в
"кошки, собаки и некоторые мыши".
(?<= подвыражение ) Утверждение положительного ретроспективного просмотра нулевой ширины. \b\w+\b(?<=.+и.+)

———————————

\b\w+\b(?<=.+и.*)

"некоторые" , "мыши"
в
"кошки, собаки и некоторые мыши".
————————————
«и» , «некоторые» , «мыши»
в
«кошки, собаки и некоторые мыши».
(? подвыражение ) Отрицательное утверждение ретроспективного просмотра нулевой ширины. \b\w+\b(?

———————————

\b\w+\b(?

«кошки» , «собаки» , «и»
в
«кошки, собаки и некоторые мыши».
————————————
«кошки» , «собаки»
в
«кошки, собаки и некоторые мыши».
(?> подвыражение ) Атомная группа. (?>а|аб)с "ac" в "ac"

ничего в "abc"

Обзоры с первого взгляда

Когда механизм регулярных выражений встречает выражение просмотра , он берет подстроку, идущую от текущей позиции до начала (просмотр назад) или конца (просмотр вперед) исходной строки, а затем выполняет Regex.IsMatch для этой подстроки, используя шаблон поиска. Затем успешность результата этого подвыражения определяется тем, является ли это утверждение положительным или отрицательным.

Осмотр Имя Функция
(?=проверить) Положительный прогноз Утверждает, что то, что следует сразу за текущей позицией в строке, является «проверкой».
(?<=проверить) Положительный просмотр назад Утверждает, что непосредственно перед текущей позицией в строке находится «проверка».
(?!проверить) Отрицательный прогноз Утверждает, что то, что следует сразу за текущей позицией в строке, не является «проверкой».
(? Отрицательный просмотр назад Утверждает, что то, что непосредственно предшествует текущей позиции в строке, не является «проверкой».

После совпадения атомарных групп не будут повторно оцениваться, даже если оставшаяся часть шаблона не удалась из-за совпадения. Это может значительно улучшить производительность, когда квантификаторы встречаются в атомарной группе или в остальной части шаблона.

Квантификаторы

Квантификатор указывает, сколько экземпляров предыдущего элемента (который может быть символом, группой или классом символов) должно присутствовать во входной строке, чтобы произошло совпадение. Квантификаторы включают языковые элементы, перечисленные в следующей таблице. Для получения дополнительной информации см. Квантификаторы.

Квантификатор Описание Узор совпадений
* Соответствует предыдущему элементу ноль или более раз. а.*к "abcbc" в "abcbc"
+ Соответствует предыдущему элементу один или несколько раз. "быть+" "пчела" в "был" , "быть" в "согнутый"
? Соответствует предыдущему элементу ноль или один раз. "рай?" "рай" в "дождь"
{ п } Соответствует предыдущему элементу ровно n раза. ",\d{3}" ",043" в "1,043,6" , ",876" , ",543" и ",210" в "9,876,549,8" 9,876,549,290
{ п ,} Соответствует предыдущему элементу не менее n раз. "\d{2,}" "166" , "29" , "1930"
{ н , м } Соответствует предыдущему элементу не менее n раз, но не более m раз. "\d{3,5}" "166" , "17668"

"19302" в "193024"

*? Соответствует предыдущему элементу ноль или более раз, но как можно меньше раз. а.*?с "abc" в "abcbc"
+? Соответствует предыдущему элементу один или несколько раз, но как можно меньше раз. "быть+?" "быть" в "было" , "быть" в "согнуто"
?? Соответствует предыдущему элементу ноль или один раз, но как можно меньше раз. "рай??" "ра" в "дождь"
{ п }? Соответствует предыдущему элементу ровно n раза. ",\d{3}?" ",043" в "1,043,6" , ",876" , ",543" и ",210" в "9,876,549,8" 9,876,549,290
{ п ,}? Соответствует предыдущему элементу не менее n раз, но как можно меньше раз. "\d{2,}?" "166" , "29" , "1930"
{ н , м }? Соответствует предыдущему элементу между n и m раза, но как можно меньше раз. "\d{3,5}?" "166" , "17668"

"193" , "024" в "193024"

Конструкции обратной ссылки

Обратная ссылка позволяет впоследствии идентифицировать ранее совпавшее подвыражение в том же регулярном выражении. В следующей таблице перечислены конструкции обратной ссылки, поддерживаемые регулярными выражениями в .NET. Дополнительные сведения см. в разделе Конструкции обратной ссылки.

Конструкция обратной ссылки Описание Узор совпадений
\ номер Обратная ссылка. Соответствует значению нумерованного подвыражения. (\ш)\1 "ее" в "искать"
\k< имя > Именованная обратная ссылка. Соответствует значению именованного выражения. (?\w)\k "ее" в "искать"

Конструкции с чередованием

Конструкции с чередованием изменяют регулярное выражение, чтобы обеспечить соответствие либо/или. Эти конструкции включают языковые элементы, перечисленные в следующей таблице. Дополнительные сведения см. в разделе Конструкции чередования.

Альтернативная конструкция Описание Шаблон совпадений
| Соответствует любому элементу, разделенному вертикальной чертой ( | ). й(е|ис|ат) "это" , "это" в "это день".
(?( expression ) yes | no )
or
(?( expression ) да )
Соответствует да , если шаблон регулярного выражения, обозначенный выражением , соответствует; в противном случае соответствует необязательной части . выражение интерпретируется как утверждение нулевой ширины.

Чтобы избежать двусмысленности с именованной или пронумерованной группой захвата, вы можете дополнительно использовать явное утверждение, например:0442 | нет )

(?(А)А\d{2}\b|\b\d{3}\b) "А10" , "910" в "А10 С103 910"
(?( name ) yes | no )
or
(?( name ) yes )
Соответствует да если имя , именованная или пронумерованная группа захвата, имеет совпадение; в противном случае соответствует необязательному no . (?")?(?(quoted).+?"|\S+\s) "Собаки.jpg" , "\"Йиска играет.jpg\"" в "Собаки.jpg \"Йиска играет.jpg\""

Замены

Замены — это элементы языка регулярных выражений, которые поддерживаются в шаблонах замены. Дополнительные сведения см. в разделе Замены. Метасимволы, перечисленные в следующей таблице, являются атомарными утверждениями нулевой ширины.

Символ Описание Узор Шаблон замены Строка ввода Строка результата
$ номер Заменяет подстроку, совпавшую с группой , номером . \b(\w+)(\s)(\w+)\b $3 $2 $1 "раз два" "два один"
${ имя } Заменяет подстроку, соответствующую именованной группе name . \b(?\w+)(\s)(?\w+)\b ${слово2} ${слово1} "раз два" "два один"
$$ Заменяет литерал "$". \b(\d+)\s?USD $$$1 "103 доллара США" "103 доллара"
$& Заменяет копию всего совпадения. \$?\d*\.?\d+ **$&** "1,30 доллара США" "**1,30$**"
$` Заменяет весь текст входной строки до совпадения. Б+ $` "AABBCC" "ААААКК"
Заменяет весь текст входной строки после совпадения. Б+ $' "AABBCC" "ААККЦ"
$+ Заменяет последнюю захваченную группу. Б+(К+) $+ "AABBCCDD" "AACCDD"
$_ Заменяет всю входную строку. Б+ $_ "AABBCC" "AAAABBCCCC"

Параметры регулярных выражений

Можно указать параметры, управляющие тем, как обработчик регулярных выражений интерпретирует шаблон регулярного выражения. Многие из этих параметров могут быть указаны либо встроенными (в шаблоне регулярного выражения), либо как одна или несколько констант RegexOptions. В этом кратком справочнике перечислены только встроенные параметры. Дополнительные сведения о встроенных параметрах и параметрах RegexOptions см. в статье Параметры регулярных выражений.

Вы можете указать встроенный параметр двумя способами:

  • С помощью другой конструкции (?imnsx-imnsx) , где знак минус (-) перед параметром или набором параметров отключает эти параметры. Например, (?i-mn) включает сопоставление без учета регистра ( i ), выключает многострочный режим ( m ) и выключает захват безымянных групп ( n ). Параметр применяется к шаблону регулярного выражения с точки, в которой он определен, и действует либо до конца шаблона, либо до точки, где другая конструкция обращает параметр.
  • С помощью конструкции группировки (?imnsx-imnsx: подвыражение ) , которая определяет параметры только для указанной группы.

Механизм регулярных выражений .NET поддерживает следующие встроенные параметры:

Параметр Описание Узор совпадений
и Использовать сопоставление без учета регистра. \b(?i)a(?-i)a\w+\b 9 и $ соответствуют началу и концу строки, а не началу и концу строки. Пример см. в разделе «Многострочный режим» раздела «Параметры регулярных выражений».
нет Не захватывать безымянные группы. Пример см. в разделе «Только явные захваты» в параметрах регулярных выражений.
с Использовать однострочный режим. Пример см. в разделе «Однострочный режим» в разделе «Параметры регулярных выражений».
х Игнорировать неэкранированные пробелы в шаблоне регулярного выражения. \b(?x) \d+ \s \w+ "1 трубкозуб" , "2 кошки" в "1 трубкозуб 2 кошки IV центурионы"

Разные конструкции

Разные конструкции либо изменяют шаблон регулярного выражения, либо предоставляют информацию о нем. В следующей таблице перечислены различные конструкции, поддерживаемые . NET. Дополнительные сведения см. в разделе Разные конструкции.

Конструкция Определение Пример
(?imnsx-imnsx) Задает или отключает такие параметры, как нечувствительность к регистру в середине шаблона. Дополнительные сведения см. в разделе Параметры регулярных выражений. \bA(?i)b\w+\b соответствует "ABA" , "Able" в "ABA Able Act"
(?# комментарий ) Встроенный комментарий. Комментарий заканчивается первой закрывающей скобкой. \bA(?# Соответствует словам, начинающимся с буквы A)\w+\b
# [до конца строки] Комментарий X-режима. Комментарий начинается с неэкранированного # и продолжается до конца строки. (?x)\bA\w+\b# Соответствует словам, начинающимся с A

См.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *