正则表达式分组,排除字符

问题

今天同事处理需求,问到我以下问题:

date=2012-12-14 00:00:00;ip=1.1.1.1;cn=abcdef


从上述字符串中通过使用正则表达式将时间提取,当然了,使用最简洁的方式提取。

我给出的方案是:
\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}

这种形式可以直接将时间提取出来,当然还不够简洁。

参考了同事以前的代码,了解到了一些正则表达式分组的知识,又给出了如下的方案:
string info = “date=2012-12-14 00:00:00”;
var result = Regex.Match(info, @"date=(?.*)");
string dateStr = result.Groups[“date”].Value;

嗯,看似OK了,拿到同事那运行发现;以后的字符也给提出出来了,不能满足需求。

继续查看资料,找解决方案,最好还是同事比我快一步解决啊。
最终使用的正则表达式为:

@"date=(?<daytime>[^;]*)"

简单的写法解决了问题。

总结

  1. 分组知识:(?<groupname>reg_exp),groupname表示组名,reg_exp表示正则表达式
  2. 排除字符串:[^abc],表示排除字符a,b,c;本次需求中,其实就是需要之前的日期字符串,需要排除,也就是[^;]
  3. .这个简单了,表示任意字符,*表示任意多个匹配,之前也是经常使用的。