代码不输入if(match.Success)

时间:2013-12-07 21:12:42

标签: c# regex

此代码有问题。它不提取所需的正则表达式的值。我将正则表达式提取percentage但代码未输入 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 个答案:

答案 0 :(得分: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.

答案 1 :(得分: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})