RegEx или Интерпретатор для интерпретации ввода целого / двойного диапазона - PullRequest
1 голос
/ 12 июля 2011

Мне нужно проверить, находится ли строка в следующем формате {x: y} или {x, y, ..., z}, где x, y, z являются целыми или двойными числами. Я думал, что мне нужен рег-экс и / или переводчик. Кто-нибудь знает, как это сделать? Кроме того, предложение для библиотеки, которая делает это, будет высоко ценится.

Вторым шагом будет использование интерпретатора, который будет интерпретировать такие выражения: 0,5 * {0,4,0,6,0,7} -> {0,2,0,3,0,35}. Я понимаю, что оптимальным подходом было бы определить грамматику для этого, которую может использовать переводчик.

Спасибо, B

Ответы [ 3 ]

2 голосов
/ 12 июля 2011

Учитывая, что есть 101 различный двойной формат, и Double.TryParse () встроен в .net framework.

Я бы использовал регулярное выражение или просто string.split, чтобы получить массив строк, содержащий ваши значения «x, y, z», а затем вызвал бы Double.TryParse для каждого из значений.

Поскольку у вас есть два возможных формата, я бы сначала проверил, содержит ли входная строка «:», а затем выделил отдельный код для разделения каждого формата, чтобы сделать код более понятным.

0 голосов
/ 12 июля 2011

Первый вариант

\{[0-9]+(\.[0-9]+)?:[0-9]+(\.[0-9]+)?\}

Второй

\{[0-9]+(\.[0-9]+)?(,[0-9]+(\.[0-9]+)?)+\}

Использование

var text = "{1.4,65,2.56}";
Regex regex = new Regex("\{[0-9]+(\.[0-9]+)?(,[0-9]+(\.[0-9]+)?)+\}");
if(regex.IsMatch(text))
{
    //string matches your criteria
}

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

\{([0-9]+(\.[0-9]+)?:[0-9]+(\.[0-9]+)?)|([0-9]+(\.[0-9]+)?(,[0-9]+(\.[0-9]+)?)+)\}
0 голосов
/ 12 июля 2011

Я не очень хорош в Regex, но я использую это для своего источника получения: http://www.regexlib.com/ На этом сайте также есть Шпаргалка и Тестер Regex, так что вы можете создать их самостоятельно довольно легко..

Надеюсь, это поможет!

...