使用RegEx用逗号(,)替换点(.)?

Moh*_* JK 7 .net c# regex cultureinfo decimal-point

我正在开发一个C#应用程序.我想用逗号(,)改变数字十进制数字,其中我有点(.)使用正则表达式.

例如:

Price= 100,00.56
Run Code Online (Sandbox Code Playgroud)

作为表示数值的国际规则,但我瑞典他们有不同的数字方式

Price= 100.00,56
Run Code Online (Sandbox Code Playgroud)

所以我想使用RegEx将点(.)改为逗号(,)和逗号(,)改为点(.).可以指导我这个.

Ode*_*ded 25

格式化数字时,应使用带有对象的字符串格式重载CultureInfo.瑞典语的文化名称是"sv-SE",可以在这里看到.

decimal value = -16325.62m;
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("sv-SE")));
Run Code Online (Sandbox Code Playgroud)

编辑:

正如@OregonGhost所指出的那样 - 解析数字也应该完成CultureInfo.

  • +1规范解决方案.重要的是要注意,这不仅是*格式*的解决方案,也是*解析*数字的解决方案. (3认同)

aba*_*hev 6

不是正则表达式解决方案,而是根据我的经验 - 更正确:

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;
}
Run Code Online (Sandbox Code Playgroud)

这个方法有什么作用?它确保如果给定的字符串是不正确的瑞典字符串但是正确的英语 - 将其转换为瑞典,例如100,00 -> 100,00but 100.00 -> 100,00


suk*_*kru 5

即使没有正则表达式,您也可以做到这一点。例如

var temp = price.Replace(".", "<TEMP>");
var temp2 = temp.Replace(",", ".");
var replaced = temp2.Replace("<TEMP>", ",");
Run Code Online (Sandbox Code Playgroud)


scr*_*pni 5

不确定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, ',');
Run Code Online (Sandbox Code Playgroud)

编辑 我同意@Oded,格式化数字使用CultureInfo该类.


Gro*_*ozz 5

另外看看

System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator
Run Code Online (Sandbox Code Playgroud)