问候。
想象一下,你被给了一个字符串(来自某个你无法控制的地方)。在该字符串中是十进制数。您希望将逗号(即:将1234567.89转换为1,234,567.89)添加到该数字,同时保持整个字符串不变。数字前的货币符号会有所不同,但逗号格式不一定因文化而异。
在.NET中有一种简单的方法吗?
如果没有简单的方法,我会进一步详细说明我的计划。我们可以使用string.Substring()来获取数字,因为它总是在一些静态文本之间。例如:
我们的字符串:
string s1 = "Blah Blah Blah. Total price: $1234567.89; Blah Blah Blah Blah"
我们可以得到这样的价格:
int start = s1.IndexOf("Total price: ") + 13;
int length = s1.IndexOf(";") - start;
string trim = s1.Substring(start, length);
抓住货币角色,剩下的就是:
char curr = trim[0];
string sAmount = s1.Substring(1, s1.Length);
现在我们可以格式化我们的小数:
decimal dAmount;
if (decimal.TryParse(sAmount, out dAmount))
{
string formattedPrice = curr + dAmount.ToString("N2");
Console.WriteLine(formattedPrice);
}
现在我可以将结果字符串插回原来的字符串中。写这个问题的关键是这对我来说非常讨厌,我希望找到一个更好的方法来解决这个问题。
感谢您的时间。我将在接下来的一个小时内对此进行更新,并将在该时间内选择答案。
答案 0 :(得分:5)
string input = "Blah Blah Blah. Total price: $1234567.89; Blah Blah Blah Blah";
string output = Regex.Replace(input, @"\d+(\.\d\d)?", match => decimal.Parse(match.Value).ToString("N"));
答案 1 :(得分:2)
尝试这样的事情:
String.Format("Total Price: {0:C}", dAmount);
编辑:对不起,喝太多咖啡,快读。以上是如何将逗号/货币符号插入数字的答案。
要回答有关将新数字重新插入旧字符串的问题,正则表达式可能最适合识别字符串中的数字,以及在完成格式化后替换它。我想我需要看到更多有效输入的例子来帮助实际的正则表达式。
答案 2 :(得分:2)
您可能希望查看System.Globalization命名空间。
您可以修剪非数字的开头和尾随字符,然后根据 System.Globalization.CultureInfo.CurrentCulture.NumberFormat 等格式化字符串。
答案 3 :(得分:1)
简单的方法是使用正则表达式来查找和替换。