在Java中从文本中提取日期

在Java中从文本中提取日期,java,string,Java,String,在Java中是否可以从字符串中提取日期 我有500多个不同数据的字符串。其中可以有: “…从2011年8月23日到2011年5月9日的期间……” 而且: “…期限截止2011年9月6日…” 不确定上面的字符串是否存在,但它们可以存在 是否可以提取3个日期并以日期格式获取它们?您可以首先使用正则表达式提取它们:\d{2}\.\d{2}.\d{4}然后使用SimpleDataFormat-新的SimpleDataFormat(“dd.MM.yyyy”)。解析(日期字符串)我将使用简单的正则表达式首先

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

我有500多个不同数据的字符串。其中可以有:
“…从2011年8月23日到2011年5月9日的期间……”
而且:
“…期限截止2011年9月6日…”

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


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

您可以首先使用正则表达式提取它们:
\d{2}\.\d{2}.\d{4}
然后使用
SimpleDataFormat
-
新的SimpleDataFormat(“dd.MM.yyyy”)。解析(日期字符串)
我将使用简单的正则表达式首先获取“可能”的日期,然后更仔细地分析它们(最好是使用IMO)。首先,我将使用一个正则表达式
\b\d{2}\.\d{2}\.\d{4}\b
(当然还有对Java字符串的转义)

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


当然,你可以让你的正则表达式更具选择性,但要让它完成所有需要的验证是非常困难的(想象一下,试图在正则表达式中对闰年的所有规则进行编码)——因此,如果你在解析时需要验证,把正则表达式复杂化没有多大意义。

你的意思是
字符串而不是文本(这是Java)

创建一个字符串对象来表示文本,然后将其解析为新的字符串:


从本质上讲,正则表达式是识别的答案,但是有很多很多方法来表示日期和时间段,因此如果您想要一个好的解决方案,您可能需要使用现有的经过良好调优的正则表达式集。然后是解释的第二阶段,这需要比JodaTime开箱解析更大的灵活性。因此,对于健壮的解决方案,您可能希望使用自然语言处理社区中构建的系统之一,例如,或。

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

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

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

年月日 年月日 年月日

其中M是月份文字,是字母表格式,如一月或一月

日期之间允许的分隔符为“/”、“\”、“,”、“|”、“-”、“”

它还可以识别以下格式的尾随时间模式 小时(24):毫米:ss.SSS上午/下午 小时(24):毫米:ss上午/下午 小时(24):毫米:ss上午/下午

解析时间是线性的,没有使用模式匹配或暴力。该算法基于树遍历和返回,包含以下三个组件的日期列表 -文本中标识的日期字符串 -已转换和格式化的日期字符串 -简化格式

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

算法库可在maven central获得

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

net.rationalminds


完整的源代码可以在GitHub上找到,网址为

您最好的选择可能是regex,正如Bozho所说,是否可以使用“关键字代码”:“period from regex-regex”和“period ends regex”作为安全检查,以确保我提取的日期正确?@user649542是,regex允许这样做。那些不是英语的东西呢?你的选择更糟糕。。。。最好的是HeidelTime,它支持多种语言,包括德语和西班牙语。我的学生Gabor Angeli有一个即将到来的。。。但是代码不太可能被使用……谢谢。搜索之后,除了海德尔泰姆,我没找到什么。如果您/Gabor想要了解一些要点,您可以在这里回答:
<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);  
   }  
 }