有没有一种很好的方法来确定String中是否包含日期信息

时间:2015-04-17 21:29:02

标签: java date

我遇到了尝试识别段落中是否包含日期信息的问题。以下是问题:

  1. 我们不知道日期字符串可能出现在哪里。一个段落就像是“我们想在11月15日设置约会。然后我们会......”。所以我们不能直接使用DateTime.parse()

  2. 日期的格式是任意的,可以是更正式的形式,如“11月15日”或“08/21/1988”或“本月5日”。

  3. 考虑到日期信息可能有多种形式,我不太可能涵盖所有情况,我只想尽可能多地涵盖案例。我能想出的轻量级解决方案是我猜的正则表达式......再次说明这将是一个巨大的表达。有没有人知道是否有更好的解决方案或可用的正则表达式?

    (P.S。我更喜欢更轻量级的方法,机器学习等方法可能更通用但不适用于我的任务)

2 个答案:

答案 0 :(得分:2)

我也可以使用正则表达式(或多个)来处理它。

我通过匹配“th”,“nd”“st”,月/日名称和缩写,点/线/斜杠/冒号分隔数字等周围的所有内容,使正则表达式匹配区域看起来像日期一样的东西。试验一下,看看有多少测试用例找到日期有多好。

解析可能的日期是另一回事。我想你需要像PHP的strtotime一样强大的功能。

另一种方法是明确定义大量可能的格式。然后,当检测到一个时,您可以轻松解析它。对我来说感觉太暴力了

答案 1 :(得分:1)

作为一个起点,http://regexlib.com处有七页日期正则表达式。如果你不知道你正在寻找哪一个,我会创建一个数组并一次应用一个。你还会遇到像2015年12月11日对2015年12月12日这样的日期的问题,所以仍然需要某种澄清程序(例如,自动回邮并询问"你的意思是12月11月或11月12日?")。