正则表达式分组,排除字符
问题
今天同事处理需求,问到我以下问题:
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>[^;]*)"
简单的写法解决了问题。
总结
- 分组知识:
(?<groupname>reg_exp)
,groupname表示组名,reg_exp表示正则表达式 - 排除字符串:
[^abc]
,表示排除字符a,b,c;本次需求中,其实就是需要;
之前的日期字符串,需要排除;
,也就是[^;]
.
这个简单了,表示任意字符,*
表示任意多个匹配,之前也是经常使用的。