2013-12-07 27 views
-1

此代码有问题。它不会提取所需的正则表达式的值。我把正则表达式提取percentage但代码不输入IF(match.Success)条件。代码不输入if(match.Success)

for (int l = 0; l < resplitted.Length; l++) 
{ 
    //MessageBox.Show(resplitted[l]); 
    Regex regex = new Regex(@"^0*(100\.00|[0-9]?[0-9]\.[0-9]{2})%$"); 

    Match match = regex.Match(resplitted[l]); 

    if (match.Success) 
    { 
     bsc =double.Parse(match.Value); 
     MessageBox.Show(bsc.ToString()); // I want here something like 90%,10.1% etc. 

    } 

} 
+2

这意味着匹配不成功。 “resplitted”中的字符串是什么? – dasblinkenlight

+0

它的字符串数组实际上,它有时候是90%,年龄,名字等。当它的90%我想休息时。 –

+2

@FaisalAshfaq当然那些不匹配,你的正则表达式在分隔符后需要两位小数:) – hvd

回答

1

你要匹配像90%条目,但是你的正则表达式需要一个小数点,并准确后两位数字了。

改变你的正则表达式这样使小数部分可选:

@"^100(\.0{1,2})?|[0-9]{1,2}(\.[0-9]{1,2})?%$" 

这里是一个演示:

Regex regex = new Regex(@"^100(\.0{1,2})?|[0-9]{1,2}(\.[0-9]{1,2})?%$"); 
foreach (var s in new[] {"100.00%","0%","100%","100.0%","90%", "90.1%", "9.00%", "0.1%"}) { 
    Match match = regex.Match(s); 
    Console.WriteLine(match.Success); 
} 

Demo on ideone.

+0

我认为你放错了你的括号,'(\。[0-9]){1,2}'匹配'.9.9'而不是'.99'。匹配“100.0”也是可取的。 – hvd

+0

@ DasblinkLight - 仍然出现问题。请再次查看。谢谢 –

+0

@FaisalAshfaq看看变化 - 这应该解决问题。 – dasblinkenlight

0

你可以使用这个(没有必要把循环内的正则表达式定义):

Regex regex = new Regex(@"^(?:100|[1-9][0-9]?|0)(?:\.[0-9]?[1-9])?%$", RegexOptions.Compiled); 

for (int l = 0; l < resplitted.Length; l++) { 
    Match match = regex.Match(resplitted[l]); 

    if (match.Success) { 
     bsc =double.Parse(match.Value); 
     MessageBox.Show(bsc.ToString()); 
    } 
} 

注意:使用此模式时,不允许使用大于100的值。如果您想允许尾随零(100.00%),您可以将最后一组更改为(?:\.[0-9]{1,2})