.NET Regex - нужна подходящая строка для разбора - PullRequest
1 голос
/ 19 апреля 2010

Я идиот регулярных выражений и никогда не нашел хорошего учебника (приветствуются ссылки, а также указатель на интерактивный встроенный редактор VS2010).

Мне нужно разобрать строки в следующей форме:

[a/b]:c/d

a, b: double with "." as possible separator. CAN be empty
c: double with "." as separator
d: integer, positive

т.е. допустимые строки:

[/]:0.25/2
[-0.5/0.5]:0.05/2
[/0.1]:0.05/2

;) Кто-нибудь может помочь?

Спасибо

Ответы [ 3 ]

3 голосов
/ 19 апреля 2010
^\[(-?\d+\.?\d+?)?/(-?\d+\.?\d+?)?\]:(-?\d+\.?\d+?)/(\d+)$

фиксирует каждое число в своей группе.

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

^\[(-?\d+\.\d+)?/(-?\d+\.\d+)?\]:(-?\d+\.\d+)/(\d+)$
1 голос
/ 19 апреля 2010

В галерее Visual Studio есть редактор регулярных выражений:
http://visualstudiogallery.msdn.microsoft.com/en-us/55c24bf1-2636-4f94-831d-28db8505ce00

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

var regex = @"(?x:
    ^                   # Anchor to start of string
    \[                  # [
        (-?\d+\.?\d+?)? # a - double
    /                   # /
        (-?\d+\.?\d+?)? # b - double
    \]                  # ]
    :                   # Literal colon character
        (-?\d+\.?\d+?)  # c - double
    /                   # /
        (\d+)           # d - integer
    $                   # Anchor to end of string
)";
1 голос
/ 19 апреля 2010
var match = Regex.Match("[-0.5/0.5]:0.05/2", @"\[([\.\-0-9]*)/([\.\-0-9]*)\]:([\.\-0-9]*)/([\.\-0-9]*)");
if (match.Success)
{
    Console.WriteLine(match.Groups[1].Value);
    Console.WriteLine(match.Groups[2].Value);
    Console.WriteLine(match.Groups[3].Value);
    Console.WriteLine(match.Groups[4].Value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...