【发布时间】:2017-11-16 02:43:26
【问题描述】:
我正在尝试使用以下代码从我的字符串中提取数字:
var mat = Regex.Match(stringValue, @"\d+").Value;
但是当stringValue 包含像“($23.01)”这样的小数时,它只提取 23 而不是 23.01。如何获得decimal 值 23.01?
【问题讨论】:
我正在尝试使用以下代码从我的字符串中提取数字:
var mat = Regex.Match(stringValue, @"\d+").Value;
但是当stringValue 包含像“($23.01)”这样的小数时,它只提取 23 而不是 23.01。如何获得decimal 值 23.01?
【问题讨论】:
尝试以这种方式解决问题。十进制数具有以下特点:
\d+)\.?)\d+)由于最后两个特征有点相关,我们可以将它放在一个组中并添加一个? 量词:(\.\d+)?。
所以现在我们有了整个正则表达式:\d+(\.\d+)?
如果你想匹配像.01这样的十进制数字(前面没有0),你可以只使用|来表示“或”并添加另一个大小写(\.\d+)。基本上:(\d+(\.\d+)?)|(\.\d+)
【讨论】:
10. 或 .01 不是有效的十进制数字?
10. 无论如何都会匹配 10。你只需要在开始时做\d*而不是\d+来匹配.01
(\d+(\.\d+)?)|(\.\d+) 应该可以工作。
你试过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))));
【讨论】:
Regex 会因输入而失败,然后您可以尝试 Linq 解决方案
试试这个
var mat= Regex.Split(stringValue, @"[^0-9.]+") .Where(c => c != "." && c.Trim() != "");
【讨论】: