首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何制定从特定字符串中获取日期的正则表达式?

如何制定从特定字符串中获取日期的正则表达式?
EN

Stack Overflow用户
提问于 2010-12-07 15:33:06
回答 1查看 351关注 0票数 1

我有以下字符串:

月:

Jan11

Feb11

Mar11

Apr11

等。

宿舍:

Q1 11

Q2 11

Q3 11

Q4 11

Q1 12

等。

年份

Cal_11

Cal_12

Cal_13

等。

我想使用一个正则表达式来创建一个DateTime对象,从每个日期的开头开始,每个日期都由一个字符串表示。所以Jan11会是

代码语言:javascript
复制
new DateTime(2011,1,1)

,Q2 11将是

代码语言:javascript
复制
new DateTime(2011,4,1)

而Cal_12将会是

代码语言:javascript
复制
new DateTime(2012,1,1).
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-07 16:00:51

这应适用于所有三种情况:

代码语言:javascript
复制
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;
}

像这样打电话:

代码语言:javascript
复制
parse("Jan11");
parse("Q2 11");
parse("Cal_12");

请注意,这并不说明传入的数据不正确。这显然是可以添加的,但会使示例变得非常混乱。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4378388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档