除了在C#中使用 Regex 库之外,我对正则表达式一无所知,对于从网络搜索的模式匹配表达式也是如此。
我想使用正则表达式来匹配以下两种格式的日期,不需要年份部分。
8 October
或8 Oct
September 19
或Sep 19
请帮帮我,搜索谷歌没有帮助我。
答案 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]+)
并获取名为day
和month
答案 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
测试结果字符串当然,您需要填写缩写列表。我只添加了一些用于测试。
答案 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}");