Консольное приложение Regex C # - PullRequest
0 голосов
/ 08 марта 2012

Как добавить регулярное выражение, которое будет принимать десятичные разряды (5.23), но ничего больше в разрыве, как это?то есть обрабатывать только цифры и десятичные разряды, которые приведут к ошибке, если будет напечатано или возвращено что-либо кроме этого:

    case 1:
    double[] myArrai1 = new double[3];
    Console.WriteLine("Insert a number");
    myArrai1[0] = double.TryParse(Console.ReadLine()); // no overload method?
     Console.WriteLine("Insert a number");
     myArrai1[1] = double.Parse(Console.ReadLine());
    Console.WriteLine("Insert a number");
    myArrai1[2] = double.Parse(Console.ReadLine());
    break;

Приветствую вас, ребята.

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

Ответы [ 5 ]

7 голосов
/ 08 марта 2012

Regex немного тяжел для проверки double.Вместо этого используйте double.TryParse (будет возвращено значение false, если ввод неверен)

double dbl;
if (!double.TryParse(Console.ReadLine(), out dbl))
    Console.WriteLine("Invalid input");
3 голосов
/ 08 марта 2012

Вам не нужно Regex для этого.

Вы можете просто использовать decimal.Parse или double.Parse - если строка ввода имеет неправильный формат, вы получите FormatException.

Код, который вы разместили, кажется правильным - что не работает?

2 голосов
/ 08 марта 2012

Вам, вероятно, будет лучше просто использовать двойной синтаксический анализ .NET, а не пытаться заново его изобретать в Regex. Вы можете использовать Double.TryParse, чтобы проверить строку и выполнить преобразование, если число может быть проанализировано:

 Console.WriteLine("Insert a number");
 string input = Console.ReadLine();
 double value;
 if (!Double.TryParse(input, NumberStyles.Any, CultureInfo.InvariantCulture, out value)) 
    throw new InvalidOperationException(String.Format("{0} could not be parsed as a valid number.", input));
2 голосов
/ 08 марта 2012

попробуйте это:

/^\d+(\.\d{1,2})?$/;

   Regex regex = new Regex ("^\d+(\.\d{1,2})?$");
    MatchCollection matches = regex.Matches(text);
     if (matches.Count>0)......
1 голос
/ 08 марта 2012

Вы хотели просто проверить, что вводит пользователь, или помешать им вводить недопустимые символы?

В первом случае регулярные выражения на самом деле не нужны.Вы находитесь на правильном пути с double.Parse, но то, что вы хотите сделать, это double.TryParse.Сначала прочитайте пользовательский ввод в строку, затем попробуйте преобразовать ее в двойную.Если TryParse возвращает false, сообщите пользователю, что его ввод недействителен, и попросите его ввести его снова.

FWIW: вот как я это сделаю (предупреждение: непроверенный код), что может быть или не быть тем, что вынужно:

case 1:
double[] myArrai1 = new double[3];
for (int i=0; i < myArrai1.length; i++) {
    Console.WriteLine("Insert a number");
    while (!double.TryParse(Console.Readline(), out myArrai1[i])) {
        Console.WriteLine("Invalid entry. Please enter a number.");
    }
}
break;
...