我正在使用十进制值正则表达式。我创建了匹配十进制值的正则表达式:
^-?\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(如果它是值中的第一个)]
答案 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.-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;
}
}