我需要一些帮助,使用正则表达式将数字重新格式化为货币。我的输入将是字符串“123”或“123.45”。我想用“123.00”替换“123”并保留“123.45”。正则表达式也将用于验证输入,因此“123”和“123.45”都应匹配。我已经使用SSN完成了类似的操作,我将9位数字符串重新格式化为nnn-nn-nnnn格式,但是货币字符串让我很难受。
对于SSN,我的正则表达式和替换字符串是:
((?!(000|666))([0-8]\d{2}))-?((?!00)\d{2})-?((?!0000)\d{4})$
$1-$4-$5
这是我正在尝试的正则表达式(甚至可以处理逗号)
([0-9]{1,3}(?:,?[0-9]{3})*)((?:\.[0-9]{2})?)$
替换$ 1中的位置是之前的部分。并且2美元之后。如果有东西,我希望替换字符串显示$ 2,如果$ 2为空,我希望显示“.00”。我该怎么做?
编辑以添加更多上下文:让我解释一下为什么我尝试这样做。我有一些代码去数据库并获取一些字符串并显示它们。我故意不知道或不关心那些字符串是什么。我也可以在文本框中编辑这些字符串。然后人们开始要求以不同于存储的格式显示字符串。首先,它以表示SSN的字符串开头,其中应显示123456789,并以123-45-6789的格式进行编辑。所以我写了一些代码,允许我为每个数据库字符串定义一个正则表达式字符串和一个替换字符串。这些字符串完成重新格式化,而正则表达式字符串用于验证文本框中的输入。所有这些都适用于SSN字符串,使用上面列出的正则表达式和替换。现在,他们想要将表示货币“123”的字符串显示为“123.00”。所以我有基础设施支持这个,如果我能拿出正确的正则表达式字符串和替换字符串。我的代码不知道这是货币。它只知道它是一个通用字符串,在显示之前应该重写。
答案 0 :(得分:0)
我不会使用正则表达式,我会使用内置格式库。
Decimal number;
if( !Decimal.TryParse( inputNumberAsString, CultureInfo.CurrentCulture, NumberFormat.Number, out number ) {
// Handle error
}
return number.ToString( CultureInfo.CurrentCulture, "c" );