#c#
#c#
Вопрос:
Я пытаюсь использовать регулярное выражение для проверки моих строковых данных, но регулярное выражение, похоже, не работает, это означает, что оно выдает неверный вывод.
Я хочу принимать данные, подобные этому :
Number
Number.Number
Вот данные, которые я хотел бы принять :
2.5
2.5
2
2
Недопустимые данные :
2..5
2.
Код :
class Program
{
static void Main(string[] args)
{
string s = "2.5 ";
var isValid = Regex.IsMatch(s, @"(^[0-9]{1,2}.?[0-9]? ?$)");
}
}
Комментарии:
1. Ваше регулярное выражение выглядит немного с привкусом perl. В .net вам это не нужно
/[regex]/
. Но ваше регулярное выражение работает для меня, как вы можете видеть здесь . Я просто добавил $ в конец, чтобы предотвратить захват допустимых частей в начале строки.2. @Pretasoc По-прежнему я получаю ложное значение с помощью предложенного вами регулярного выражения.Regex. IsMatch возвращает false при вводе 2,5
3. Я не могу воспроизвести ошибку.
4. Пожалуйста, напишите и опубликуйте короткую, полную программу, которую мы можем вырезать и вставить в Visual Studio, которая четко демонстрирует проблему.
5. Тем не менее, ваше регулярное выражение по-прежнему неверно. Он принимает
000
и2.
, которые, я думаю, вы не намерены принимать, верно?
Ответ №1:
Здесь позвольте мне показать вам, как написать полезный репродуктор:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main(string[] args)
{
string pattern = @"(^[0-9]{1,2}.?[0-9]? ?$)";
// These should be true, and they are.
Console.WriteLine(Regex.IsMatch("2.5 ", pattern));
Console.WriteLine(Regex.IsMatch("2.5 ", pattern));
Console.WriteLine(Regex.IsMatch("2 ", pattern));
Console.WriteLine(Regex.IsMatch("2", pattern));
// These should be false, and they are.
Console.WriteLine(Regex.IsMatch("2..5", pattern));
Console.WriteLine(Regex.IsMatch(" 2.", pattern));
// These should be false, but are true because
// the pattern is wrong.
Console.WriteLine(Regex.IsMatch("2.", pattern));
Console.WriteLine(Regex.IsMatch("000", pattern));
}
}
Когда я запускаю эту программу, я получаю именно то поведение, которое ожидается, поэтому никакого воспроизведения. Если вы получаете разные результаты на своем компьютере, действительно происходит что-то очень странное; какие результаты вы получаете на своем компьютере?
Если вопрос в том, «как я могу исправить ошибку в моем регулярном выражении, чтобы оно не совпадало 000
и 2.
?», вы можете сделать это с помощью (^[0-9]{1,2}(.[0-9])? ?$)
Комментарии:
1. Большое вам спасибо за ваше драгоценное время и за ваши добрые усилия, направленные на то, чтобы помочь мне. Приветствуется :). Да, действительно, я не хотел принимать 000 и 2. и я так счастлив, что наконец-то получил от вас ответ 🙂
Ответ №2:
Это регулярное выражение работает для всех опубликованных вами данных. Если вы допускаете более одной цифры после точки, вы должны добавить желаемый квантификатор после второй [0-9]
var isValid = Regex.IsMatch(s, @"^[0-9]{1,2}(.[0-9])? ?$");
Комментарии:
1. Проголосовал против за ваши добрые усилия по оказанию мне помощи и за ваше драгоценное время. Приветствуется 🙂