使用regex C#从字符串中获取十进制值

时间:2018-05-22 12:23:16

标签: c# regex

我想提取输入字符串的十进制值

"Total (pre tax) 93.78 EUR"

我试过

Regex.Replace(string input, "[^0-9]+", string.Empty)

但它只提取“9370”,预期结果为“97.30”

请帮我模式获取小数值

6 个答案:

答案 0 :(得分:4)

我建议匹配而不是替换:让提取感兴趣的值,而不是删除所有其他人物。

string result = Regex.Match(
     "Total (pre tax) 93.78 EUR", 
    @"[0-9]+(\.[0-9]+)?")
  .Value;

答案 1 :(得分:2)

您目前正在替换不是数字的所有内容 - 包括.

我建议您使用可选的“点后跟更多数字”来捕获数字组。这样你就可以从文本中捕获多个值 - 或者如果你需要,可以根据你拥有的任何标准拒绝它。这是一个例子:

using System;
using System.Text.RegularExpressions;

class Program
{
    public static void Main()        
    {
        string text = "I start with 5 and take away 2.52 to get 2.48 as a result";
        Regex regex = new Regex(@"\d+(\.\d+)?");
        var matches = regex.Matches(text);
        foreach (Match match in matches)
        {
            Console.WriteLine(match.Value);
        }
    }
}

输出:

5
2.52
2.48

您可以使用MatchCollection.Count来确定有多少匹配 - 我们不知道您的上下文,但您可能希望采取不同的操作,具体取决于是否没有匹配,只有一个匹配或更多比一场比赛。

答案 2 :(得分:1)

如果您将'.'添加到您希望保留的字符列表,即[^0-9.],则可以将您的方法用作快速黑客。但是,这不够强大,因为它会保留其他数字,例如

Total (inclusive of 20% VAT) 93.78 EUR

会产生2093.78,这不是你想要的。

更好的方法是使用特定于价格的正则表达式,例如

@"(\d+[.,]\d\d) EUR"

将匹配带有两位小数的数字,后面跟EUR

答案 3 :(得分:0)

对于整数或浮点数:

SVML

仅适用于花车:

string result = Regex.Match(input,@"[0-9]+(\.[0-9]+)?").Value;

答案 4 :(得分:0)

Regex.Split()将从输入字符串中提取所有浮动值并将其存储到string[],就像string.Split函数

一样简单

你可以试试这个:

string stringInput = "Total (pre tax) 93.78 EUR";
string[] splitValue = Regex.Split (stringInput , @"[^0-9\.]+");
foreach(string item in splitValue)
{
    //Here you can convert it to decimal
    Console.WriteLine(item);
}

输出:

93.78

DotnetFiddler

答案 5 :(得分:0)

string input = "Java JDK 12.0.1";
var result = Regex.Matches(input, @"[0-9]+(\.[0-9]\.[0-9]+)?");
  

结果:1​​2.0.1