从C#中的字符串中提取十进制数[重复]

Posted

技术标签:

【中文标题】从C#中的字符串中提取十进制数[重复]【英文标题】:Extract decimal Number from string in C# [duplicate] 【发布时间】:2017-11-16 02:43:26 【问题描述】:

我正在尝试使用以下代码从我的字符串中提取数字:

var mat = Regex.Match(stringValue, @"\d+").Value;

但是当stringValue 包含像“($23.01)”这样的小数时,它只提取 23 而不是 23.01。如何获得decimal 值 23.01?

【问题讨论】:

【参考方案1】:

尝试以这种方式解决问题。十进制数具有以下特点:

以一位或多位数字开头 (\d+) 之后,可以有 1 个或 0 个点 (\.?) 如果存在点,则还应跟随一个或多个数字 (\d+)

由于最后两个特征有点相关,我们可以将它放在一个组中并添加一个? 量词:(\.\d+)?

所以现在我们有了整个正则表达式:\d+(\.\d+)?

如果你想匹配像.01这样的十进制数字(前面没有0),你可以只使用|来表示“或”并添加另一个大小写(\.\d+)。基本上:(\d+(\.\d+)?)|(\.\d+)

【讨论】:

10..01 不是有效的十进制数字? @xunatai 不,我不认为它们是十进制数 @xunatai 10. 无论如何都会匹配 10。你只需要在开始时做\d*而不是\d+来匹配.01 @xunatai 哎呀!那是我的快速思考。 (\d+(\.\d+)?)|(\.\d+) 应该可以工作。 @Sweeper 如果字符串包含 "($23)" 并且没有十进制值,它会起作用吗?【参考方案2】:

你试过this Example:

string inputStr =  "($23.01)";      
Console.WriteLine(Regex.Match(inputStr, @"\d+.+\d").Value);

或者你可以试试这个 LinqSolution:

Console.WriteLine(String.Concat(inputStr.Where(x=> x=='.'||Char.IsDigit(x))));

【讨论】:

当字符串包含“($23)”时,会失败 @HumaAli: Regex 会因输入而失败,然后您可以尝试 Linq 解决方案 在最后加一个问号:\d+.+\d?【参考方案3】:

试试这个

var mat= Regex.Split(stringValue, @"[^0-9.]+") .Where(c => c != "." && c.Trim() != "");

【讨论】:

以上是关于从C#中的字符串中提取十进制数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正整数提取

从char数组中提取十六进制数[关闭]

对十进制数使用自定义字符串格式c#

c语言中如何提取二进制数中的某一位?

C语言实现字符串中(10进制和16进制)转成十进制数

在 C# 中将十进制数转换为双精度数会产生差异