从Java中的文本中提取日期

时间:2011-03-11 07:32:33

标签: java string

是否可以从Java中的字符串中提取日期?

我有500多个不同数据的字符串。在其中,可以有:
“...期间2011年2月8日 - 2011年5月9日......” 还有:
“...期间于06.09.2011结束......”。

不确定上面的字符串是否存在,但它们可以是。

是否可以提取3个日期并以日期格式获取它们?

5 个答案:

答案 0 :(得分:4)

您可以先使用正则表达式提取它们:\d{2}\.\d{2}\.\d{4},然后使用SimpleDateFormat - new SimpleDateFormat("dd.MM.yyyy").parse(dateString)

解析每个匹配项

答案 1 :(得分:4)

本质上正则表达式是识别的答案,但是有很多很多方法来表达日期和时间段,所以如果你想要一个好的解决方案,你可能想要使用现有的井 - 一套正则表达式。然后是第二阶段的解释,它需要比JodaTime开箱即用解析更灵活。因此,对于强大的解决方案,您可能希望使用自然语言处理社区中构建的系统之一,例如SUTimeHeidelTimeGUTime

答案 2 :(得分:1)

我会使用简单正则表达式首先获取“可能”日期,然后更仔细地解析它们(理想情况下使用Joda Time,IMO)。我首先使用\b\d{2}\.\d{2}\.\d{4}\b的正则表达式(当然还有Java字符串的转义)。

\b位与字边界匹配,因此12345.45.12345将不匹配。)

当然,你可以让你的正则表达式更具选择性,但是非常难以让所有所需的验证(想象试图编码所有规则在正则表达式中闰年) - 所以如果你需要在解析时进行验证,那么使正则表达式复杂化并不是很重要。

答案 3 :(得分:0)

你的意思是String而不是文本(这是Java)

创建一个String对象来表示文本,然后将其解析为新的DateFormat class

SimpleDateFormat = new SimpleDateFormat("dd.MM.yyyy").parse(yourString)

答案 4 :(得分:-2)

日期模式识别算法,不仅可识别日期模式,还可以Java日期格式提取可能的日期。该算法非常快速且轻量级。处理时间是线性的,所有日期都在一次通过中识别。 算法使用树遍历机制解析日期。树数据结构是自定义创建的,用于构建支持的日期,时间和月份模式。

该算法还确认日期文字之间的多个空格字符。例如。 DD DD DD和DD DD DD被视为有效日期。

以下日期模式被认为是有效的,并且可以使用此算法识别。

dd MM(MM)yy(yy) yy(yy)MM(MM)dd MM(MM)dd yy(yy)

其中M是月份字面值是字母格式,如Jan或January

日期之间允许的分隔符是' /',' \',' ',',',' |',' - ',' '

它还以下列格式识别尾随时间模式 hh(24):mm:ss.SSS am / pm hh(24):mm:ss am / pm hh(24):mm:ss am / pm

分辨率时间是线性的,不使用模式匹配或强力。该算法基于树遍历并返回,日期列表包含以下三个组件 - 文本中标识的日期字符串 - 转换&格式化日期字符串 - SimpleDateFormat

使用日期字符串和格式字符串,用户可以根据需要自由地将字符串转换为对象。

算法库可在maven central获得。

<dependency>
    <groupId>net.rationalminds</groupId>
    <artifactId>DateParser</artifactId>
    <version>0.3.0</version>
</dependency>

使用此示例代码如下所示。

 import java.util.List;  
 import net.rationalminds.LocalDateModel;  
 import net.rationalminds.Parser;  
 public class Test {  
   public static void main(String[] args) throws Exception {  
        Parser parser=new Parser();  
        List<LocalDateModel> dates=parser.parse("Identified date :'2015-January-10 18:00:01.704', converted");  
        System.out.println(dates);  
   }  
 }  

输出: [LocalDateModel {originalText = 2015-january-10 18:00:01.704,dateTimeString = 2015-1-10 18:00:01.704,conDateFormat = yyyy-MM-dd HH:mm:ss.SSS,start = 18,end = 46}]

http://coffeefromme.blogspot.com/2015/10/how-to-extract-date-object-from-given.html

上的详细博客

完整的来源可在GitHub https://github.com/vbhavsingh/DateParser

上找到