在金额栏里用逗号把金额分开,小数部分保留四位小数,怎么写正则表达式。如:345,423,546.0812

解决方案 »

  1.   

    txtmoney.Text = string.Format("{0:C}",Convert.ToDecimal(txtmoney.Text))
      

  2.   

    3       环视应用今天写累了,暂时就给出一个环视的综合应用实例吧,至于环视的应用场景和技巧,后面再整理。需求:数字格式化成用“,”的货币格式。正则表达式:(?<=\d)(?<!\.\d*)(?=(?:\d{3})+(?:\.\d+|$))测试代码:double[] data = new double[] { 0, 12, 123, 1234, 12345, 123456, 1234567, 123456789, 1234567890, 12.345, 123.456, 1234.56, 12345.6789, 123456.789, 1234567.89, 12345678.9 };foreach (double d in data){    richTextBox2.Text += "源字符串:" + d.ToString().PadRight(15) + "格式化:" + Regex.Replace(d.ToString(), @"(?<=\d)(?<!\.\d*)(?=(?:\d{3})+(?:\.\d+|$))", ",") + "\n";}输出结果:源字符串:0              格式化:0源字符串:12             格式化:12源字符串:123            格式化:123源字符串:1234           格式化:1,234源字符串:12345          格式化:12,345源字符串:123456         格式化:123,456源字符串:1234567        格式化:1,234,567源字符串:123456789      格式化:123,456,789源字符串:1234567890     格式化:1,234,567,890源字符串:12.345         格式化:12.345源字符串:123.456        格式化:123.456源字符串:1234.56        格式化:1,234.56源字符串:12345.6789     格式化:12,345.6789源字符串:123456.789     格式化:123,456.789源字符串:1234567.89     格式化:1,234,567.89源字符串:12345678.9     格式化:12,345,678.9实现分析:首先根据需求可以确定是把一些特定的位置替换为“,”,接下来就是分析并找到这些位置的规律,并抽象出来以正则表达式来表示。1、   这个位置的左侧必须为数字2、   这个位置右侧到出现“.”或结尾为止,必须是数字,且数字的个数必须为3的倍数3、   这个位置左侧相隔任意个数字不能出现“.”由以上三条,就可以完全确定这些位置,只要实现以上三条,组合一下正则表达式就可以了。根据分析,最终匹配的结果是一个位置,所以所有子表达式都要求是零宽度。1、   是对当前所在位置左侧附加的条件,所以要用到逆序环视,因为要求必须出现,所以是肯定的,符合这一条件的子表达式即为“(?<=\d)”2、   是对当前所在位置右侧附加的条件,所以要用到顺序环视,也是要求出现,所以是肯定的,是数字,且个数为3的倍数,即“(?=(?:\d{3})*)”,到出现“.”或结尾为止,即“(?=(?:\d{3})*(?:\.|$))”3、   是对当前所在位置左侧附加的条件,所以要用到逆序环视,因为要求不能出现,所以是否定的,即“(?<!\.\d*)”因为零宽度的子表达式是非互斥的,最后匹配的都是同一个位置,所以先后顺序是不影响最后的匹配结果的,可以任意组合,只是习惯上把逆序环视写在左侧,顺序环视写在右侧。
    http://blog.csdn.net/lxcnn/archive/2009/06/28/4304754.aspx
      

  3.   


    decimal money = 345423546.08121111M;
    Console.WriteLine(money.ToString("C"));
    这个可以完全不要正则表达式的