私はC#アプリケーションに取り組んでいます。正規表現を使用してドット(。)があるところをコンマ(、)で数字の10進数を変更したい。
例えば:
Price= 100,00.56
数値を表すこの国際的なルールですが、私はスウェーデンのように、数値に対してさまざまな方法があります
Price= 100.00,56
だから私は正規表現を使用してドット(。)をカンマ(、)に、カンマ(、)をドット(。)に変更したい。これについて私を導くことができます。
私はC#アプリケーションに取り組んでいます。正規表現を使用してドット(。)があるところをコンマ(、)で数字の10進数を変更したい。
例えば:
Price= 100,00.56
数値を表すこの国際的なルールですが、私はスウェーデンのように、数値に対してさまざまな方法があります
Price= 100.00,56
だから私は正規表現を使用してドット(。)をカンマ(、)に、カンマ(、)をドット(。)に変更したい。これについて私を導くことができます。
数値をフォーマットするときは、オブジェクトを取る文字列フォーマット オーバーロードCultureInfo
を使用する必要があります。スウェーデン語のカルチャ名は "sv-SE" で、ここで確認できます。
decimal value = -16325.62m;
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("sv-SE")));
編集:
@OregonGhost が指摘しているように、数値の解析も で行う必要があります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;
}
このメソッドは何をしますか? 指定された文字列が正しくないスウェーデン文字列であるが、正しい英語である場合、それをスウェーデン文字列に変換します (例: 100,00 -> 100,00
but ) 100.00 -> 100,00
。
正規表現がなくてもこれを行うことができます。例えば
var temp = price.Replace(".", "<TEMP>");
var temp2 = temp.Replace(",", ".");
var replaced = temp2.Replace("<TEMP>", ",");
100,00.56 が何を表しているかわからないのですが、10.000,56 のことですか?
あなたの質問に答えるには:
このような単純なタスクに、なぜ RegEx を使用するのでしょうか? あなたはそれをもっと簡単に行うことができます:
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
クラスを使用します。
こちらもご覧ください
System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator
この種のことを RegExp に依存しないでください :) build in cultures 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 に住んでいるのでそれを使用しますが、出力に合った文化を使用する必要があります。