我有一个带货币符号的字符串。我只需要提取小数点和负号。
以下是字符串和所需十进制值的一些示例:
-$ 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);
}
它适用于提取十进制数字,但不适用于第一个和第三个示例。任何建议表示赞赏。
答案 0 :(得分:4)
您可以使用此正则表达式用空字符串替换Dispose
,数字和-
以外的所有内容
.
这只会使您的电话号码带有负号。
[^-\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);
}