从字符串的开头提取小数

我有一个5.5kg 7.90gram7.90 7.90gram的字符串,我希望得到5.57.90作为十进制值。 如何在C#中获得这样的结果,还有一件事我的字符串将始终以十进制开头。

这是我的代码,只要遇到除小数之外的任何内容,就会抛出错误。

 string weight = attributeValue; if (!string.IsNullOrEmpty(weight)) { product.Weight = Convert.ToDecimal(attributeValue); } else { product.Weight = 0.00m; } 

我会创建一个与前导数字部分匹配的正则表达式。 这在一定程度上取决于你是否总是有一个小数点,是否要允许数千个分隔符的逗号,是否总是使用. 作为小数点,等等。它可能看起来像这样:

 ^-?\d+(?:\.\d+)? 

然后将该正则表达式与您的文本匹配,获取匹配的值(如果成功)并对该值使用decimal.Parsedouble.Parse

 Regex regex = new Regex(@"^-?\d+(?:\.\d+)?"); Match match = regex.Match(text); if (match.Success) { weight = decimal.Parse(match.Value, CultureInfo.InvariantCulture); } 

请注意,对于诸如质量之类的“自然”值,您可能最好使用double不是decimal 。 后者更适合于诸如货币之类的“人为”值,这些值自然最好用十进制表示并具有精确值。 这取决于你在做什么。

这是一种完全不同的方法

  string oldstr = "1.7meter"; Char[] strarr = oldstr.ToCharArray().Where(c => Char.IsDigit(c) || Char.IsPunctuation(c)).ToArray(); decimal number = Convert.ToDecimal( new string(strarr)); 

对于您的输入格式,您可以通过此代码获得小数

 var weight =Decimal.Parse( Regex.Match(input_string, "[0-9]*\\.*[0-9]*").Value); 

如果您的输入字符串格式不同,则必须更改正则表达式模式