我创建了一个包含数组列表的函数Datepattern,并添加了日期模式正则表达式 我的代码如下
private ArrayList getDatePatterns(){ ArrayList alDate = new ArrayList();
//Thursday, the 7th December, 2006.00
alDate.add("\\b(?i)(monday|tuesday|wednesday|thursday|friday|saturday|sunday)[ ]*[,][ ]*(the)[ ]*[0-9]+(st|th|rd|nd)?[ ]*(Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[t]?[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]*[,][ ]*[0-9]+\\b");
//Examples: 24th July to 3rd August, 2007 24 July to 3 August, 2007
alDate.add("\\b(?i)(?:0?[1-9]|[12][0-9]|3[01])(st|th|rd|nd)?([ ])?(Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[t]?[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]?(to)([ ])?(0?[1-9]|[12][0-9]|3[01])(st|th|rd|nd)?([ ])?(Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[t]?[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]*[\\,]?([ ])*([0-9]+)?\\b");
//Examples: 1.4.94-to-25.1.95
// alDate.add("\\b(?i)[0-9]+[ ]*[.][ ]*[0-9]+[ ]*[.][ ]*[0-9]+[ ]*[.][ ]*(to)[ ]*[0-9]+[ ]*[.][ ]*[0-9]+[ ]*[.][ ]*[0-9]+\\b");
//Examples: 9th & 12th August, 9th and 12th August, 2008 9th to 12th August, 2008 9th/12th August, 2008 9th-12th August, 2008
//////// alDate.add("\\b(?i)(?:(from)?([ ])?0?[1-9]|[12][0-9]|3[01])[ ]*(st|th|rd|nd)?([ ])?(and|to|\\/|[\\-]|&)([ ])?(0?[1-9]|[12][0-9]|3[01])[ ]*(st|th|rd|nd)?([ ])?(of)?([ ])?(Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[t]?[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]*[\\,]*([ ])?([0-9]+)?\\b");
//Example : 28th July 28 July 24 July 2007 24-July-2007 24th July, 2007 24 July, 2007 24th day of July, 2007 21st of May, 2008
alDate.add("\\b(?i)(Letter No[.]?[ |-])?(?:0?[1-9]|[12][0-9]|3[01])([\\-]|[ ])?(st|th|rd|nd)?([ ])?(day[ ]of[ ])?(of[ ])?(Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[t]?[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)([ ]?[\\,]?([\\-]|[ ])?([0-9]+))\\b");
//Example : August 24, 07; November 26-30, 2007
alDate.add("\\b(?i)(?:Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[.]?|Sept[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]?((0?[1-9]|[12][0-9]|3[01])[ ]?[-][ ]?)?(0?[1-9]|[12][0-9]|3[01])([ ])?[\\,]([ ])?([0-9]+)?\\b");
//June 08 and June 2008; May'08 and June'08
alDate.add("\\b(?i)(?:Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[.]?|Sept[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]?([\\,\\'])?([ ])?([0-9]+)?[ ]*(and)[ ]*(?:Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[.]?|Sept[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]?([\\,\\'])?([ ])?([0-9]+)?\\b");
//Example : March, 2009; March 2009; June-April, 2008
alDate.add("\\b(?i)((?:Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[.]?|Sept[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]?[-][ ]?)?(?:Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[.]?|Sept[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]?([\\,])?([ ])?[0-9]+\\b");
//Examples: from dd-mm-yy to dd-mm-yy dd/mm/yy , dd.mm.yy etc
// alDate.add("\\b(?i)(i[.]e[.]|viz[.]|means)\\s(from[ ])(0?[1-9]|[12][0-9]|3[01])([\\.]|[\\-]|[ \\/])+(?:0?[1-9]|1[0|1|2])([\\.]|[\\-]|[ \\/])+[0-9]+([ ]to[ ])(?:0?[1-9]|[12][0-9]|3[01])([\\.]|[\\-]|[ \\/])+(?:0?[1-9]|1[0|1|2])([\\.]|[\\-]|[ \\/])+[0-9]+\\b");
// alDate.add("\\b(?i)(from[ ])(0?[1-9]|[12][0-9]|3[01])([\\.]|[\\-]|[ \\/])+(?:0?[1-9]|1[0|1|2])([\\.]|[\\-]|[ \\/])+[0-9]+([ ]to[ ])(?:0?[1-9]|[12][0-9]|3[01])([\\.]|[\\-]|[ \\/])+(?:0?[1-9]|1[0|1|2])([\\.]|[\\-]|[ \\/])+[0-9]+\\b");
// 28th Feburary
alDate.add("\\b(?i)(the)?[ ]*[0-9]+(st|th|rd|nd)?[ ]*(Jan[.]?|January|February|Feb[.]?|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[t]?[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)");
//Examples: dd-mm-yy , dd/mm/yy , dd.mm.yy etc
alDate.add("\\b(?i)(?:0?[1-9]|[12][0-9]|3[01])([\\.]|[\\-]|[ \\/])+(?:0?[1-9]|1[0|1|2])([\\.]|[\\-]|[ \\/])+[0-9]+\\b");
//2002-2003
//alDate.add("\\b([0-9]+[\\-][0-9]+)\\b");
return alDate;
}
而不是这个我希望一个单一的正则表达式满足所有上述条件。在评论更多的理解我提到了正则表达式遵循的日期模式。 任何人帮助我,我想为日期模式而不是这个大代码编写一个正则表达式。 我想减少代码。 谢谢你
答案 0 :(得分:3)
不要使用RegEx进行日期解析,请使用SimpleDateFormat
。 : - )
答案 1 :(得分:0)
不幸的是,您的问题对于您希望使用代码实现的目标非常模糊。对我来说,听起来你想要解析不同格式的日期字符串,并可能将它们转换为DateFormat.parse(String)
中的Date
对象。
编辑:我几乎完全确定,正则表达式不是您的代码尝试执行的任务的正确工具,但您不希望因某些原因而泄露。我很确定,你正在努力重新解决一个普遍而微妙的问题,特别是在国际化方面存在一些陷阱。通常这些可以通过一小组库函数来解决,这些函数可以保护程序员(你),这个混乱的未来维护者,以及应用程序的(探测者)用户处理上述问题及其后果。
无论如何,将RE粘合在一起会使其更难以阅读/维护。