不同日期格式的正则表达式

时间:2015-04-19 11:13:16

标签: c# regex

任何人都知道2008年5月6日日期格式的正则表达式,日期会改变,但格式将保持不变。感谢

3 个答案:

答案 0 :(得分:0)

这种模式非常简单,但编写起来很麻烦......

\d{1,2}\s+(?:January|February|March|April|May|June|July|August|September|October|November|December)\s+\d{4}
  • \d{1,2} - 一位或两位数字
  • \s+ - 至少一个空格
  • (?:January| ... |December) - 一个月的名字(很明显)
  • \s+至少一个空格
  • \d{4} - 四位数字

我没有尝试执行任何验证,因此匹配42 February 5678 - 在匹配后使用适当的工具验证日期。

答案 1 :(得分:0)

所以基本上你需要像@"(\d{1,2} [a-z]{3} \d{4})"这样的模式 将ignore case标志设置为true,你就可以了:

string s = "Original Deed of Rectification dated 6 May 2008 between (1) John Smith and BobbyShevlin and (2) John Timmy.";
Match m = new Regex(@"(\d{1,2} [a-z]{3} \d{4})", RegexOptions.IgnoreCase).Match(s);
MessageBox.Show("|" + m.Value + "|");

当然,除非日期包含孔月份名称,否则您需要Lucas Trzesniewski's answer
注意:这不是任何方式的验证!只是一种提取可能代表日期的字符串的方法。除了43 hte 6453之外,它将作为匹配。

答案 2 :(得分:0)

简单的事情:

string str = "1.    Original Deed of Rectification dated 06 May 2008 between (1) John Smith and BobbyShevlin and (2) John Timmy";

var culture = new CultureInfo("en-US");
var monthNames = "(" + string.Join("|", culture.DateTimeFormat.AbbreviatedMonthNames.Take(12).Select(x => Regex.Escape(x))) + ")";

var regex = new Regex("([0-3]?[1-9] " + monthNames + " [1-2][0-9]{3})");
var match = regex.Match(str);

if (match.Success)
{
    string date = match.Value;
    DateTime date2 = DateTime.ParseExact(date, "d MMM yyyy", culture);
}

唯一复杂的是如何从.NET系统获取月份名称。请注意,日期范围检查可以改进......因为它将接受 39 May 2999 ,然后它将会爆炸"爆炸"在DateTime.ParseExact。请注意,我使用缩写月份名称:-) Jan,Feb,March等。