正则表达式修复小数值

时间:2015-05-07 13:01:29

标签: c# regex

我正在使用十进制值正则表达式。我创建了匹配十进制值的正则表达式:

^-?\d*([\.,]\d*)?$

这会检查有关十进制的所有要求(负值/正值,开头只有一个-字符,只有一个.字符等。

现在我正在尝试创建用于修复错误的指定十进制值的正则表达式

我的第一个选择是创建替换正则表达式 [^.0-9-,]这将删除十进制中不应存在的所有字符,但它允许输入例如值: -12.12.12.12.12 这当然是错的。

你可以帮我解决替换正则表达式,它将修复'我的十进制值(删除所有不必要的字符)

---- ---- EDIT

输入和结果的示例:

-12.12 - > -12.12 [无变化]

-12.12.12 - > -12.1212 [删除了错误。字符]

- 12 - > -12 [删除所有内部值的符号]

128-22 - > 12822 [与以前相同]

12- - > 12 [删除 - 在最后位置]

-12。 - > -12。 [离开最后。 char(如果它是值中的第一个)]

1 个答案:

答案 0 :(得分:1)

以下代码:

string pattern = @"^-?((?<bad>[^\d\.,])|\d)*([\.,](\d|(?<bad>\D+))*)?$";
bool done = false;
while (!done) {
    var bad = Regex.Match(input, pattern).Groups["bad"];

    if (bad.Success) {
        input = input.Remove(bad.Index, bad.Length);
    } else {
        done = true;
    }
}

修复了一些示例,即:

  • -12.12.12
  • - 12
  • 128-22
  • 12 -

您的其他示例不会按要求更改。 还修复了例如: 12.12.-1dfd2.1-2

但是要小心,实际上不可能测试所有可能性,所以我可能错过了一些东西。

递归选项:

    public static string FixDecimal(string input) {
        var bad = Regex.Match(input, @"^-?((?<bad>[^\d\.,])|\d)*([\.,](\d|(?<bad>\D+))*)?$").Groups["bad"];

        if (bad.Success) {
            return FixDecimal(input.Remove(bad.Index, bad.Length));
        } else {
            return input;
        }
    }