C# 最大值正则表达式

C# 最大值正则表达式,c#,.net,regex,C#,.net,Regex,我提出了以下regexp来接受间隔为.25或四分之一格式的值,如1.25、10.75、11.50、12、13 正则表达式 范例 接受值=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-不接受0.25,但接受0.25 2-如何将该值限制为最大值,我希望它最多可接受15.5您可以尝试以下方法: string input = "0, 0.25, 0.50, 0.75, 1 , 1.

我提出了以下regexp来接受间隔为.25或四分之一格式的值,如1.25、10.75、11.50、12、13

正则表达式

范例

接受值=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-不接受0.25,但接受0.25

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

您可以尝试以下方法:

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 "";
     });
由于正则表达式不支持数学运算,您可以尝试以下操作:

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 "";
     });

因为在我看来,正则表达式不支持数学运算,所以正则表达式不是这类工作的正确工具。您想要接受的所有值都是十进制值,为什么不简单地将输入的值解析为十进制值,然后检查您接受的值是否正确

decimal number;

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

它会简单得多,而且不会出错。

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

decimal number;

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

它会简单得多,而且不会出错。

我认为Regex是一种错误的方法,但是如果你坚持,下面的方法应该适合你

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

我认为正则表达式是一种错误的方法,但是如果你坚持,下面的方法应该适合你

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

它不接受.25,就好像你在开始时有一个
\d+
,这意味着你在
之前至少要等待一个数字。我想您可以通过以下方式将
\d+
更改为接受,直到15岁


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

不接受。25就好像您在开始时有一个
\d+
,这意味着您在
之前至少要等待一个数字。我想您可以通过以下方式将
\d+
更改为接受,直到15岁


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

这是一种错误的方法,但仍然是一种解决方案

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

给出:

.25
3.75000
10.500
0.25

这是一种错误的方法,但仍然是一种解决方案

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

给出:

.25
3.75000
10.500
0.25

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

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

演示:

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

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

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

最后一个是

^((0+1)[1-4]?([124\.0+.250*.50*.750*)(15([124\.0+.250*.50*))$
^(0-1)][1-4]?([124\.0+.250*.250*.750*)用于匹配0-14个数字
将数字15、15.25、15.50*与以下内容匹配
15(\.0+\.250*\.50*)

最后一个是



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

如果你正在执行
1/4英寸增量,为什么你不能检查该值是否更大>
15.5
如果(f==0.25%)英寸,什么会阻止你写一些条件检查&&inches<15.5
如果您正在执行
1/4
英寸增量,为什么您不能检查该值是否大于
15.5
如果(f>0&&f%0.25==0&&f
如果(inches%.25<0),有什么阻止您编写一些条件检查
if(f>0&&f
if(inches%.25<0)&&inches<15.5
我不认为OP想要列表中的最大值,只想将匹配限制为小于15.5的值。我不认为OP想要列表中的最大值,只想将匹配限制为小于15.5的值。这不匹配
.25
@arco444,对,它不应该匹配。它应该匹配
0.25
确实如此。OP的问题1向我提出了相反的建议?它也匹配了
15.75
我一开始没有接受这个值。可能跳过了。这与
.25
@arco444不匹配,对,也不应该匹配。它应该匹配
0.25
并且匹配。OP的问题1向我提出了相反的建议?它也匹配s
15.75
我没有把它作为第一位的值来接受。可能跳过了它。你接受的所有值都是十进制的,至少从你的问题来看是这样。如果值不是十进制的,TryParse将失败,并返回false,所以你知道它是否返回true,它已经是一个好的格式。@user1263981.25的倍数怎么可能不是呢是否可以表示为十进制?至少从您的问题来看,您接受的所有值都是十进制的。如果值不是十进制的,TryParse将失败并返回false,这样您就知道如果它返回true,那么它已经是一种好的格式了。@user1263981、<15.5的.25的倍数怎么可能不能表示为十进制的?@user1263981-它不是…请遵循t他链接并将其输入窗口。还有一个问题,我如何将其更改为接受max 4.5?将
(1[0-4]|[0-9])
更改为
([0-3])
15
更改为
4
,因为max 24将是^((2[0-3]| 1[0-9]|[0-9])?(\(0-25 | 5 | 75)0*));24(\(0)0*)?)$@user1263981-这不是…按照链接将其输入窗口。还有一个问题,我如何将其更改为接受max 4.5?将
(1[0-4]|[0-9])
更改为
([0-3])
15
更改为
4
,对于max 24,将是^0((2[0-3]| 1[0-9]|[0-9]|[0-9])?(\(0-25 | 5 | 75)0*)。)$Matches
51894.0000
这是>15匹配
15.75
这是>15.5不匹配
8.250
现在这个工作正常了,但我认为问题解决了;)很好。匹配
51894.0000
这是>15匹配
15.75
这是>15.5不匹配
8.250
现在这个工作正常,但我认为问题解决了;)很好。很抱歉输入错误。修改人?@Anna No