使用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()上崩溃了。说输入格式错误?

使用regex将部分字符串转换为double

也许.不是您正在使用的区域性的小数分隔符。解析时尝试指定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的建议,仅删除最后一个字符