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

Hum*_*Ali 2 c# regex string

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

var mat = Regex.Match(stringValue, @"\d+").Value;
Run Code Online (Sandbox Code Playgroud)

但是当stringValue包含像"($ 23.01)"这样的小数时,它只提取23而不是23.01.我怎样才能得到decimal23.01 的值?

suj*_*lil 6

你有没有试过这个例子

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

或者你可以试试这个 LinqSolution:

Console.WriteLine(String.Concat(inputStr.Where(x=> x=='.'||Char.IsDigit(x))));
Run Code Online (Sandbox Code Playgroud)


Swe*_*per 6

尝试以这种方式解决问题.十进制数具有以下功能:

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

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

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

如果你想匹配十进制数字.01(前面没有0),你可以|用来表示"或"并添加另一个案例(\.\d+).基本上:(\d+(\.\d+)?)|(\.\d+)