2012-9-9
2012-09-9
2012-9-09
均须替换为标准格式
2012-09-09由于有的数据不标准,所以可能有空格,需要把空格,以及前后多余的部分考虑进去如
  2012-09 -9 12:00
我写的规则不完美,例如针对2012-9-9的(.*)(\d{4})(\s*)(-)(\s*)(\d{1})(\s*)(-)(\s*)(\d{1})(.*)替换规则 $2-0$6-0$10以上规则可以将2012-09 -9 12:00  替换为2012-09-09但如果遇到
2012-9-09
就变成
2012-09-00

请教下该怎么修改才能比较完美
当然,如果必须对应每个都写正则的话
那需要保证
(.*)(\d{4})(\s*)(-)(\s*)(\d{1})(\s*)(-)(\s*)(\d{1})(.*)
这个规则
对2012-9-09
这个格式。不产生任何替换

解决方案 »

  1.   

    本帖最后由 caozhy 于 2012-10-09 12:24:09 编辑
      

  2.   

    var str = @"2012-9-9
    2012-09-9
    2012-9-09
    均须替换为标准格式
    2012-09-09";
     str = Regex.Replace(str, @"(\d{4})\-0?(\d)\-0?(\d\D?)", "$1-0$2-0$3");
      

  3.   


    string str="2012 - 09 - 8";
    DateTime dt=Convert.ToDateTime(System.Text.RegularExpressions.Regex.Replace(str,@"\s*", ""));
    string newstr=dt.ToString("yyyy-MM-dd");
      

  4.   

    没有比较过使用Covnert与Regex的效率谁优。如果抛开效率问题不谈,使用Convert的代码会更直观明了
    var output = DateTime.Parse("2011-9-09").ToString("yyyy-MM-dd");
      

  5.   

    因为我使用的一款软件上面就填
    正则规则:
    替换规则:
    这两项
    格式就是 
    正则规则:(.*)(\d{4})(\s*)(-)(\s*)(\d{1})(\s*)(-)(\s*)(\d{1})(.*)
    替换规则:$2-0$6-0$10麻烦大家看看呢,这个正则规则该怎么写例如以上是针对2012-9-9格式的怎么改才能确保它不影响2012-9-09格式,或其他格式,只影响2012-9-9格式
      

  6.   

    string str="2012 - 09 - 8";
    DateTime dt=Convert.ToDateTime(System.Text.RegularExpressions.Regex.Replace(str,@"\s*", ""));
    string newstr=dt.ToString("yyyy-MM-dd");
      

  7.   

    其实我觉得是这样的
    我写的那个
    (.*)(\d{4})(\s*)(-)(\s*)(\d{1})(\s*)(-)(\s*)(\d{1})(.*)
    对应2012-9-9如果遇到2012-9-09
    正则判断到2012-9-0,后面那个9就不判断,也输出了
    能不能精确判断,第二个"-"后就只有1个数字才匹配,如果有2个数字就不匹配了