使用正则表达式将字符串的一部分转换为double

时间:2013-05-29 15:26:24

标签: c# regex string double type-conversion

我的应用程序似乎崩溃了“错误的格式”,我有这个:

Match m = Regex.Match(value, "[0-9]+[.[0-9]+]?");
double number = Convert.ToDouble(m.Value);
return number;

要点是将这样的字符串值:114.6W, 120.6W.转换成我可以排序的值。 我写的函数假设将任何字符串转换为9999.9999双精度值,但它在Convert.ToDouble()上崩溃。说错输入格式?

5 个答案:

答案 0 :(得分:2)

问题在于你的正则表达式:它应该是

[0-9]+(\.[0-9]+)?

[.[0.9]+](我很惊讶解析)是一个字符类,用于查找以下集合中的任何字符:点,开始和结束括号,0到9或加号。

答案 1 :(得分:2)

也许.不是您正在使用的文化的小数分隔符。解析时尝试指定InvariantCulture

double number = Convert.ToDouble(m.Value, CultureInfo.InvariantCulture);

答案 2 :(得分:0)

您必须用括号

替换方括号
Match m = Regex.Match(value, @"[0-9]+(?:\.[0-9]+)?");

答案 3 :(得分:0)

如果保证始终是十进制数后跟一个字母,则:

var word = "120.6W";
var d = Decimal.Parse(word.Substring(0,word.Length-1));

答案 4 :(得分:0)

尝试这两个正则表达式,您可能需要测试并根据您的需求进行调整

这个会抓住所有数字,包括.,但只有在后面跟着 W (不会抓住w)

(?i)\d+\.\d+(?=w)

这个人将抓住所有数字,不管它后面是什么

\d+\.\d+

或者如果您的数据集只包含数字加上一个字母而前面或后面没有任何内容,请按@paul建议,只删除最后一个字符