任何人都知道2008年5月6日日期格式的正则表达式,日期会改变,但格式将保持不变。感谢
答案 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等。