匹配任何格式的日期应该是什么样的正则表达式:
26FEB2009
31DEC2009
27 Mar 2008
30 Jul 2009
26-Feb-2009
27-Aug-2009
29/05/2008
07.11.2008
Jan 11 2008
May 26 2008
该正则表达式应该是什么?
我的正则表达式与 26-Feb-2009 和 26 FEB 2009 相匹配但不包含 26FEB2009 。所以如果有人知道那么请更新它。
(?:^|[^\d\w:])(?'day'\d{1,2})(?:-?st\s+|-?th\s+|-?rd\s+|-?nd\s+|-|\s+)(?'month'Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[uarychilestmbro]*(?:\s*,?\s*|-)(?:'?(?'year'\d{2})|(?'year'\d{4}))(?=$|[^\d\w])
日期26FEB2009是其他字符串的子字符串,如 FUTIDX 26FEB2009 NIFTY 0 ,并从html页面解析,因此我无法设置空格或分隔符。
答案 0 :(得分:4)
我建议你不要使用正则表达式来解析日期,甚至强烈反对使用正则表达式来解析HTML。对于解析日期,您可以查看TryParseExact方法以及解析HTML DOM解析器,例如Html Agility Pack:
var dateStr = "26FEB2009";
var formats = new[]
{
"ddMMMyyyy", "dd MMM yyyy", "dd/MM/yyyy"
};
DateTime date;
if (DateTime.TryParseExact(
dateStr,
formats,
CultureInfo.InvariantCulture,
DateTimeStyles.NoCurrentDateDefault,
out date))
{
// You have a match, use the date object
}
答案 1 :(得分:1)
如果匹配2009年2月26日而不是26FEB2009,听起来你需要在每个日期段之间选择空格和分隔符(“ - ”和“/”)。
+ meta字符指定一个或多个,考虑对空格使用*(零或更多)。
修改
我的意思是,如果你的正则表达式是用空格/分隔符匹配日期,但是没有它们中的任何一个匹配日期,即26FEB2009,那么听起来你指的是空格/分隔符是强制性的比赛。
这是我很快被撞到的东西:
(\d{1,2})(\/|-|\s*)?((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)|\d{2})(\/|-|\s*)?(\d{4})
您可能想要检查它是否缺少您想要的某些功能,但它与您的所有示例相匹配。