Получение отрицательного десятичного числа из строки валюты - PullRequest
2 голосов
/ 10 апреля 2019

У меня есть строка с символом валюты.Мне нужно извлечь только десятичную дробь вместе с отрицательным знаком.

Вот несколько примеров строки и желаемого десятичного значения:

-$ 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);
        }

Работает для извлечения десятичных чисел, но не работает для 1-го и 3-го примера.Любое предложение приветствуется.

Ответы [ 2 ]

4 голосов
/ 10 апреля 2019

Вы можете заменить все, кроме -, цифр и ., используя это регулярное выражение с пустой строкой,

[^-\d\n.]+

, который оставит вас только с нужным номером с отрицательным знаком.

Демо

C # Демо

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);

печать

-$ 100 --> -100
C$ 400.68 --> 400.68
-$ 578.89 --> -578.89
1 голос
/ 10 апреля 2019

Вы можете использовать группы захвата для этого. Один для знака, а другой для суммы. Затем вы можете объединить оба и попытаться проанализировать его как десятичное число.

Регулярное выражение, которое я использую ниже, имеет пару предположений. Но это должно соответствовать сценариям использования, которые вы выдвинули.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...