从货币字符串获取负小数

时间:2019-04-10 15:31:44

标签: c# regex

我有一个带货币符号的字符串。我只需要提取小数点和负号。

以下是字符串和所需十进制值的一些示例:

-$ 100 : -100 
C$ 400.68 : 400.68
-$ 578.89: -578.89

这是我当前正在使用的代码。

        var match = Regex.Match(valueToParse, @"-?[0-9]*\.?[0-9]+");
        if (match.Success)
        {
            decimal.TryParse(match.Value, out result);
        }

它适用于提取十进制数字,但不适用于第一个和第三个示例。任何建议表示赞赏。

2 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式用空字符串替换Dispose,数字和-以外的所有内容

.

这只会使您的电话号码带有负号。

Demo

C# Demo

[^-\d\n.]+

打印

Regex regex = new Regex(@"[^-\d\n.]+");
string input = "-$ 100";
string result = regex.Replace(input, "");
Console.WriteLine(input + " --> " + result);
input = "C$ 400.68";
result = regex.Replace(input, "");
Console.WriteLine(input + " --> " + result);
input = "-$ 578.89";
result = regex.Replace(input, "");
Console.WriteLine(input + " --> " + result);

答案 1 :(得分:1)

您可以为此使用捕获组。一个用于符号,另一个用于金额。然后,您可以将两者连接起来并尝试将其解析为十进制。

我在下面使用的正则表达式有两个假设。但这应该适合您提出的用例。

var valueToParse = "-$ 578.89";
var match = Regex.Match(valueToParse, @"^(?<sign>-?).*? (?<amount>\d+(\.\d+)?)$");
if (match.Success)
{
    decimal.TryParse($"{match.Groups["sign"]}{match.Groups["amount"]}", out var result);

    Console.WriteLine(result);
}