此代码有问题。它不提取所需的正则表达式的值。我将正则表达式提取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.
}
}
答案 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);
}
答案 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})