最大值的正则表达式

时间:2014-12-02 16:47:16

标签: c# .net regex

我已经提出了以下正则表达式来接受.25间隔或四分之一格式的值,如1.25,10.75,11.50,12,13。

正则表达式

^\d+((\.0+)*|(\.250*)|(\.50*)|(\.750*))$
  

示例

     

可接受的值 = 0,0.25,0.50,0.75,3,1.25,1.50,1.75,5,10

     

不接受的值 = 0.15,0.20,0.26,0.30,1.30,1.55

我有以下问题;

1-它不接受.25但接受0.25

2-如何将值限制为最大数量,我希望它最多接受15.5

7 个答案:

答案 0 :(得分:6)

在我看来,正则表达式不是这种工作的正确工具。您要接受的所有值都是十进制值,为什么不简单地将输入的值解析为十进制,然后检查它对于您接受的值是否正确?

decimal number;

if (Decimal.TryParse(value, out number))
   // Check if you're in the correct range

它会更简单,更容易出错。

答案 1 :(得分:0)

你可以试试这个:

string input = "0, 0.25, 0.50, 0.75, 1 , 1.25 , 1.50, 1.75 0.15, 0.20, 0.26, 0.30, 1.30, 1.55";  
double max = double.MinValue;
var result = Regex.Replace(input, @"\b\d\.\d+\b", match =>         
    {       
    double d = double.Parse(match.Value);
    // do whatever you want
    if (d > max)
        max = d;
        return "";
     });

因为正则表达式不支持数学运算

答案 2 :(得分:0)

我认为正则表达式是错误的做法,但是如果你坚持,那么下面应该适合你。

^(\d|1[0-5]?)((\.0+)*|(\.250*)|(\.50*)|(\.750*))$

答案 3 :(得分:0)

它不接受.25,好像你在开头有一个\d+,这意味着你在"."之前至少等待一个数字。我认为您可以通过以下\d+更改(0|1)?[1-5]?以接受到15。

可以找到正则表达式详细信息here

答案 4 :(得分:0)

这是错误这样做的方法,但仍然是一个解决方案

^((1[0-4]|[0-9])?(\.(25|5|75)?0*)?|15(\.(25|5)?0*)?)$

DEMO

Regex r = new Regex("^((1[0-4]|[0-9])?(\\.(25|5|75)?0*)?|15(\\.(25|5)?0*)?)$");
string[] arr = {".25", "17.545", "3.75000","19.5","10.500","0.25"};

foreach(string s in arr) {
    if (r.IsMatch(s)) { Console.WriteLine(s); }
}

给出:

.25
3.75000
10.500
0.25

答案 5 :(得分:0)

您可以使用此正则表达式:

^((?:1[0-4]|[0-9])?(?:\.(?:25|5|75))?0*|15(?:\.(?:25|5)?0*)?)$

演示: http://regex101.com/r/eQ2pA1/7

答案 6 :(得分:0)

^(0|1)?[1-4]?(|\.0+|\.250*|\.50*|\.750*)$匹配0-14个数字和 做一个|与数字15,15.25,15.50 *匹配以下内容 15(|\.0+|\.250*|\.50*)

最后一个将是

^(((0|1)?[1-4]?(|\.0+|\.250*|\.50*|\.750*)) | (15(|\.0+|\.250*|\.50*)))$