Заменить точку(.) с запятой (,) с помощью RegEx?

Я работаю над приложением c#. Я хочу изменить десятичную цифру с запятой (,), где у меня есть точка(.) использование регулярного выражения.

например:

Price= 100,00.56

Как это международное правило представления числовых значений, но я Швеция, у них есть разные способы для чисел, таких как

Price= 100.00,56

поэтому я хочу изменить точку(.) в запятую (,) и запятую (,) в точку (.) использование RegEx. Мог бы помочь мне в этом.

6 ответов


при форматировании чисел, вы должны использовать перегрузка строкового формата что происходит CultureInfo


Смотрите также

System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator

вы можете сделать это даже без regex. Например

var temp = price.Replace(".", "<TEMP>");
var temp2 = temp.Replace(",", ".");
var replaced = temp2.Replace("<TEMP>", ",");

Не уверен, что 100,00.56 представляет, Вы имели в виду 10.000,56?
Чтобы ответить на ваш вопрос:

для такой простой задачи зачем использовать регулярное выражение? Вы можете сделать это намного проще:

string oldValue = "100,00.56";
char dummyChar = '&'; //here put a char that you know won't appear in the strings
var newValue = oldValue.Replace('.', dummyChar)
                       .Replace(',', '.')
                       .Replace(dummyChar, ',');

редактировать Я согласен с @Oded, для форматирования чисел используйте CultureInfo класса.


не решение RegEx, но из моего опыта-более правильно:

public static string CheckDecimalDigitsDelimiter(this string instance)
{
    var sv = new CultureInfo("sv-SE");
    var en = new CultureInfo("en-US");

    decimal d;
    return (!Decimal.TryParse(instance, NumberStyles.Currency, sv, out d) &&
            Decimal.TryParse(instance, NumberStyles.Currency, en, out d)) ?
        d.ToString(sv) : // didn't passed by SV but did by EN
        instance;
}

что делает этот метод? Это гарантирует, что если данная строка является неправильной строкой Sweden, но является правильной английской-преобразуйте ее в Швецию, например 100,00 -> 100,00 но 100.00 -> 100,00.


Не полагайтесь на RegExp для такого рода вещей :) используйте сборку в культурах fx:

decimal s = decimal.Parse("10,000.56", NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"));
string output = s.ToString("N",CultureInfo.GetCultureInfo("da-DK"));

en-US будет анализировать его правильно, а da-DK использует другой вид представления. Я живу в DK и поэтому использую это, но вы должны использовать культуру, которая соответствует вашему выходу.