从C#中的字符串中提取十进制数

时间:2017-06-14 05:49:31

标签: c# regex string

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

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

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

3 个答案:

答案 0 :(得分:5)

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

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

由于最后两个功能是相关的,我们可以将其放在一个组中并添加?量词:(\.\d+)?

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

如果您想匹配.01之类的十进制数字(前面没有0),您可以使用|表示“或”并添加另一个案例(\.\d+)。基本上:(\d+(\.\d+)?)|(\.\d+)

答案 1 :(得分:1)

您是否尝试过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))));

答案 2 :(得分:-1)

试试这个

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