1

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

我想让正则表达式以下面两种提到的格式匹配日期,不需要年份部分。

  1. 8 October或者8 Oct

  2. September 19或者Sep 19

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

4

5 回答 5

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
}

进一步阅读:自定义日期时间格式

于 2012-10-09T09:16:30.387 回答
1

试试这个正则表达式:

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

并获得名为:daymonth

于 2012-10-09T09:16:56.907 回答
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 提供的方法测试生成的字符串

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

在 Regexr 上查看

于 2012-10-09T09:20:33.027 回答
1

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

((?<Day>\d\d?) (?<Month>[A-Z][a-z]+))|((?<Month>[A-Z][a-z]+) (?<Day>\d\d?))
于 2012-10-09T09:21:04.487 回答
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}");
于 2012-10-09T09:28:22.997 回答