使用regex将部分字符串转换为double
本文关键字:转换 double 字符串 regex 使用 | 更新日期: 2023-09-27 18:15:59
我的应用程序似乎崩溃了"错误的格式",我有这个:
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()
上崩溃了。说输入格式错误?
也许.
不是您正在使用的区域性的小数分隔符。解析时尝试指定InvariantCulture
:
double number = Convert.ToDouble(m.Value, CultureInfo.InvariantCulture);
问题是你的正则表达式:它应该读
[0-9]+('.[0-9]+)?
[.[0.9]+]
(我很惊讶解析)是一个字符类,查找以下集合中的任何字符:点,左右括号,0到9,或加号。
必须用圆括号代替方括号
Match m = Regex.Match(value, @"[0-9]+(?:'.[0-9]+)?");
如果保证总是一个后跟一个字母的十进制数,则:
var word = "120.6W";
var d = Decimal.Parse(word.Substring(0,word.Length-1));
尝试这两个正则表达式,您可能需要测试和调整您的需求
这个将抓取包括.
在内的所有数字,但只有当后面跟着W(不会抓取W)
(?i)'d+'.'d+(?=w)
这个会抓取所有的数字不管后面是什么
'd+'.'d+
或者如果您的数据集仅由数字加一个字母组成,并且前面或后面没有任何内容,请按照@paul的建议,仅删除最后一个字符