删除货币符号、1000 的分隔符并标准化十进制符号[重复]

Posted

技术标签:

【中文标题】删除货币符号、1000 的分隔符并标准化十进制符号[重复]【英文标题】:Remove currency symbol, 1000's separator and standardise the decimal notation [duplicate] 【发布时间】:2019-01-21 10:33:16 【问题描述】:

我正在尝试创建一个正则表达式来删除字符串中接收到的财务值的格式。

我已经编写了删除货币符号的代码,但是在删除 1000 的分隔符时遇到了问题,因为它可以是以下任何一种:, . '

这是我目前所拥有的:

string pattern = @"\pSc*(\s?\d+[.,]?\d*)\pSc*";
string replacement = "$1";
string input = "here are the text values: $16,000.32 12.19 £16.29 €18.000,29  €18,29 ₹17,00,00,00,000.00";
string result = Regex.Replace(input, pattern, replacement);
Console.WriteLine(result);

如何修改我的代码以替换 1000 的分隔符并标准化十进制表示法?

【问题讨论】:

NumberStyles 是你的朋友 “我有一个问题,然后我使用了正则表达式。现在我有两个问题” - 正则表达式不适合这个问题。 副本不会直接回答这个问题。但是,是的,他不应该使用正则表达式来解析小数。相反,您应该走很长的路:按空格拆分值,然后使用decimal.TryParse(v, NumberStyles.AllowCurrencySymbol | NumberStyles.Any, c, out decimal d) 解析它们。您可以将所有允许的CultureInfos 存储在列表/数组中,并使用循环/LINQ 将它们传递给decimal.TryParse。如果它返回true,则您有十进制值。然后使用decimal.ToString(format) 获得您想要的格式。您使用String.Join 构建结果字符串 【参考方案1】:

你可以使用这样的模式:(\d)[.,'](\d3)

说明:如果前面是数字,后跟三位数字,它将匹配您列出的任何千位分隔符[.,']

前后数字被捕获到第一个和第二个捕获组中,因此您只需将匹配替换为\1\2,即省略分隔符。

注意:如果小数部分超过三位,它也会删除小数分隔符。

【讨论】:

以上是关于删除货币符号、1000 的分隔符并标准化十进制符号[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用货币符号和千位分隔符解析浮点值

无法解析逗号分隔的字符串数量。最初带有货币符号

DecimalFormat(数字格式)

php 删除十进制删除小数价格删除magento货币符号中的十进制价格编辑价格编辑货币编辑小数

java中 DecimalFormat格式的定义

java中 DecimalFormat格式的定义