【问题标题】:How to format number as money using regex如何使用正则表达式将数字格式化为货币
【发布时间】:2019-02-12 09:08:55
【问题描述】:

我正在尝试使用正则表达式将数字格式化为金额格式,如下所示。

  var input = "1234567.00"
  var pattern = @"\d(?=(\d{3},?)+\.)";
  var replacement = "$$$&,";

  var output = Regex.Replace(input, pattern, replacement);

这给了我 $1,23$4,567.00(额外的 $)。

我想要像下面这样

Input:1234567.00 or 1234,567.00 or 1234567 should return $1,234,567.00

请提出正确的建议。

【问题讨论】:

  • 你想得到什么?结果呢?
  • @SL5net 已更新。请检查
  • 如何使用正则表达式?你没有。将其解析为小数并使用字符串格式选项将其转换为货币格式的字符串...
  • 为什么不使用 ToString("C") 并检查stackoverflow.com/questions/45600344/…
  • "如果你只有一个正则表达式,那么一切看起来就像一个字符串操作。"

标签: c# regex c#-4.0


【解决方案1】:

看看MSDN文档sample

var input = "1234567.00";
NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;
var currencyValue = decimal.Parse(input);
var output = currencyValue.ToString( "C", nfi );

【讨论】:

  • 我清楚地提到了使用正则表达式。以上你的样品是众所周知的。谢谢
【解决方案2】:

Access Denied 对您的实际(非正则表达式)问题有正确的答案。这不是您可以轻松完成的事情,甚至不应该使用正则表达式。有限制。这就像在问 »我怎样才能与Console.WriteLine 建立数据库连接?« 真是荒谬。

如果您绝对、迫切地必须这样做,您可以一次更换:

Regex.Replace(input, @"^|(\d{3}(?=(\d{3})*(\.|$)))", m => m.Value == "" ? "$" : "," + m.Value);

这将在开头添加$,并相应地插入逗号。它还将忽略区域设置、货币符号和其他答案正确的其他内容。

【讨论】:

  • 如何与 Console.WriteLine 建立数据库连接?很好的例子.. 感谢您的回答
【解决方案3】:

可能是这样的:

//.replace(/(\d)(?=(\d{3})+\b)/g, "$1,").replace(/(.*\d)/g, '$$$1');
var input = "1234567.00";

var commaPattern = @"(\d)(?=(\d{3})+\b)";
var commaReplacement = "$1,";
var output = Regex.Replace(input, commaPattern, commaReplacement);

var dollarPattern = @"(.*\d)";
var dollarReplacement = "$$$1";
output = Regex.Replace(output, dollarPattern, dollarReplacement);

捐赠 1,234,567.00 美元

【讨论】:

  • 为什么要投反对票? @noxsoul,是否可以结合两个正则表达式?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多