Заменить точку(.) с запятой (,) с помощью 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 и поэтому использую это, но вы должны использовать культуру, которая соответствует вашему выходу.