Как вернуть обратную внутреннюю скобку в Regex?
Образец данных - это прейскурант продукта, показывающий разные ценовые разрывы на основе приобретенного количества. Формат - количествоLow - количествоHigh: pricePer; кратными.
Я использовал LINQPad для создания этого выражения С# Regex для разделения частей, что показывает удобную визуализацию разделения данных в Regex. В этом примере есть "внутренняя" скобка (выбор), создающая иерархическую структуру данных.
string mys = "1-4:2;5-9:1.89";
Regex.Matches (mys, @"((\d+)[-|\+](\d*):(\d+\.?\d*);?)").Dump(); // Graphically show
Это сводится к (совпадение - это все). Внутри матча есть одно совпадение и групповое совпадение. Внутри группового совпадения есть несколько одиночных совпадений.)
- MatchCollection (2 элемента)
- Групповая коллекция (4 предмета)
- CaptureCollection (1 элемент)() Группа "1-4: 2;"
- CaptureCollection (1 элемент)() Группа "1"
- CaptureCollection (1 элемент)() Группа "4"
- CaptureCollection (1 элемент)() Группа "2"
- CaptureCollection (1 элемент)() Соответствует "1-4; 2;"
- Групповая коллекция (4 предмета)
- CaptureCollection (1 элемент)() Группа "5-9: 1.89"
- CaptureCollection (1 элемент)() Группа "5"
- CaptureCollection (1 элемент)() Группа "9"
- CaptureCollection (1 элемент)() Группа "1.89"
- CaptureCollection (1 элемент)() Соответствует "5-9: 1.89"
- Групповая коллекция (4 предмета)
Только для справки:
- () группа скобок обнаружила результаты, на которые можно ссылаться на \1..\9 (я думаю).
- \d соответствует одной цифре. + После соответствует одной или нескольким цифрам. * после совпадений ноль или более цифр.? после говорит, что это совпадение необязательно.
- . соответствует одному символу. \. в этом случае соответствует периоду или десятичному значению.