如何制定一个正则表达式来获取特定字符串的日期?

时间:2010-12-07 15:33:07

标签: c# regex datetime substitution

我有以下字符串:

  

个月:
  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).

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");

请注意,这并不能解释传入的错误数据。这显然可以添加,但会使示例变得混乱。