我有以下字符串:
个月:
Jan11
Feb11
Mar11
Apr11
等
宿舍:
Q1 11
Q2 11
Q3 11
Q4 11
Q1 12
等
年
Cal_11
Cal_12
Cal_13
等
我想使用正则表达式从字符串表示的每个日期的开头创建一个DateTime对象。所以Jan11将是
new DateTime(2011,1,1)
,Q2 11将是
new DateTime(2011,4,1)
和Cal_12将是
new DateTime(2012,1,1).
答案 0 :(得分:2)
这应该是所有三种情况:
DateTime? parse(string text)
{
Match m = Regex.Match(text, @"^(\w\w\w)(\d+)$");
if (m.Success)
{
return new DateTime(
2000 + Convert.ToInt32(m.Groups[2].Value),
1 + Array.IndexOf(CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames, m.Groups[1].Value),
1);
}
m = Regex.Match(text, @"^Q(\d+) (\d+)$");
if (m.Success)
{
return new DateTime(
2000 + Convert.ToInt32(m.Groups[2].Value),
1 + 3 * (Convert.ToInt32(m.Groups[1].Value) - 1),
1);
}
m = Regex.Match(text, @"^Cal_(\d+)$");
if (m.Success)
{
return new DateTime(
2000 + Convert.ToInt32(m.Groups[1].Value),
1,
1);
}
return null;
}
这样打电话:
parse("Jan11");
parse("Q2 11");
parse("Cal_12");
请注意,这并不能解释传入的错误数据。这显然可以添加,但会使示例变得混乱。