将一个日期或两个日期的字符串转换为正确数量的Java日期实例

将一个日期或两个日期的字符串转换为正确数量的Java日期实例,java,regex,string,date,Java,Regex,String,Date,我有以下可能的字符串模式(空格是可变的): 我想转换成Java日期,一个或两个 有正则表达式的捷径吗?我正在迁移旧版excel电子表格(如果有影响,则列未格式化)如果我正确理解了您的问题,下面是一个片段,它应该可以做到这一点,或者至少可以为您提供基本信息: Matcher m = Pattern.compile("(\\d+)-(\\d+)?\\s*(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)").matcher(input); while

我有以下可能的字符串模式(空格是可变的):

我想转换成Java日期,一个或两个


有正则表达式的捷径吗?我正在迁移旧版excel电子表格(如果有影响,则列未格式化)

如果我正确理解了您的问题,下面是一个片段,它应该可以做到这一点,或者至少可以为您提供基本信息:

Matcher m = Pattern.compile("(\\d+)-(\\d+)?\\s*(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)").matcher(input);
while (m.find()) {
    if (m.groupCount()==3) {
        int first = Integer.valueOf(m.group(1));
        int second = Integer.valueOf(m.group(2));
        String month = m.group(3);
        // DO something here
    } else {
        int first = Integer.valueOf(m.group(1));
        String month = m.group(2);
        // Do something here
    }
}

如果我正确理解了你的问题,这里有一个片段可以帮助你解决问题,或者至少给你一些基本知识:

Matcher m = Pattern.compile("(\\d+)-(\\d+)?\\s*(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)").matcher(input);
while (m.find()) {
    if (m.groupCount()==3) {
        int first = Integer.valueOf(m.group(1));
        int second = Integer.valueOf(m.group(2));
        String month = m.group(3);
        // DO something here
    } else {
        int first = Integer.valueOf(m.group(1));
        String month = m.group(2);
        // Do something here
    }
}

@恩,不,不是真的。我知道如何创建java日期。我投票决定结束,但没有给予足够的关注。这里有些日期比较复杂(6月15-18日)@尼姆霍普斯基:你应该澄清一下。@ColinHebert已经更改了标题以强调特定的模式。@ColinHebert-很好。我肯定没有注意到!NimChimpsky-抱歉,SimpleDataFormat使您能够从字符串解析日期,但您必须首先知道格式,这就是正则表达式的作用,这就是您的问题所在。可能性的排列是有限的吗?@ndtreviv嗯,不,不是真的。我知道如何创建java日期。我投票决定结束,但没有给予足够的关注。这里有些日期比较复杂(6月15-18日)@尼姆霍普斯基:你应该澄清一下。@ColinHebert已经更改了标题以强调特定的模式。@ColinHebert-很好。我肯定没有注意到!NimChimpsky-抱歉,SimpleDataFormat使您能够从字符串解析日期,但您必须首先知道格式,这就是正则表达式的作用,这就是您的问题所在。可能性的排列是有限的吗?好的,但是你改变了你的问题,增加了一些案例。无论如何,基本思想是使用捕获组(使用“(”和“)”),非捕获组(使用“(?:”和“)”),量词(“?”=0或1,“*”=0,1或更多,“+”至少1。逻辑或运算符“|”有关regexp的所有详细信息,请查看
模式
Javadoc。好的,但是您更改了问题并添加了更多的案例。无论如何,基本思想是使用捕获组(使用“(”和“))、非捕获组(使用“(?:”和“))))、量词(“?”=0或1,“*”=0,1或更多,“+”至少为1。逻辑或运算符“|”有关regexp的所有详细信息,请查看
模式
Javadoc。