匹配日期的正则表达式

时间:2012-10-09 09:09:36

标签: c# regex datetime datetime-format

除了在C#中使用 Regex 库之外,我对正则表达式一无所知,对于从网络搜索的模式匹配表达式也是如此。

我想使用正则表达式来匹配以下两种格式的日期,不需要年份部分。

  1. 8 October8 Oct

  2. September 19Sep 19

  3. 请帮帮我,搜索谷歌没有帮助我。

5 个答案:

答案 0 :(得分:6)

为什么在框架已经为您提供旨在实现此目的的TryParseExact方法时,正在使用正则表达式:

public class Program
{
    static void Main()
    {
        var str = "8 October";
        DateTime date;
        var formats = new[] { "d MMMM", "d MMM" };
        if (DateTime.TryParseExact(str, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
        {
            Console.WriteLine(date);
        }
        else
        {
            Console.WriteLine("The date was not in one of the 2 supported formats 'd MMMM' orr 'd MMM'");
        }
    }
}

你甚至可以让它具有文化意识。例如,假设您的网站的法语用户可能会写8 Octobre而不是8 October

在这种情况下,您可以指定当前文化或强制使用特定文化:

var str = "8 Octobre";
DateTime date;
var formats = new[] { "d MMMM", "d MMM" };
var ci = new CultureInfo("fr-FR");
if (DateTime.TryParseExact(str, formats, ci, DateTimeStyles.None, out date))
{
    // use the date instance here
}

进一步阅读:custom datetime formats

答案 1 :(得分:1)

试试这个正则表达式:

(?<month>[a-zA-Z]+)\s+(?<day>\d+)|(?<day>\d+)\s+(?<month>[a-zA-Z]+)

并获取名为daymonth

的群组

答案 2 :(得分:1)

要在较大的字符串中查找日期,您可以执行以下操作:

\b(?:\d{1,2}\s(?:Jan|Feb|Sep|Oct)(?:[a-z]+\b)?|(?:Jan|Feb|Sep|Oct)(?:[a-z]+\b)?\s\d{1,2})\b

与选项IgnoreCase一起使用。

然后然后使用方法Darin Dimitrov provided

测试结果字符串

当然,您需要填写缩写列表。我只添加了一些用于测试。

here on Regexr

答案 3 :(得分:1)

如果你必须使用正则表达式试试这个

((?<Day>\d\d?) (?<Month>[A-Z][a-z]+))|((?<Month>[A-Z][a-z]+) (?<Day>\d\d?))

答案 4 :(得分:1)

  string Date = "December 8"

  MatchCollection MC = Regex.Matches(Date, @"(?i)([\d]{1,2}(\s)?(January|Jan|February|feb|March|mar|April|Apr|May|June|July|August|Aug|September|Sep|October|Oct|November|Nov|December|Dec))|(January|Jan|February|feb|March|mar|April|Apr|May|June|July|August|Aug|September|Sep|October|Oct|November|Nov|December|Dec)(\s)?[\d]{1,2}");