如何从字符串中获取日期和计数元素?

时间:2014-04-06 00:24:36

标签: java regex

我有以下字符串

 String str1 =   "Peter L. Douglas 04/02/1984 X1 X5 YY" ;

我需要获得三个单独的字符串,如下所示

String str1_name = "Peter L. Douglas" ;
String str1_date = "04/02/1984" ;
String str1_nbr  = "3"  ;     // 3 is three elements after date , i.e. X1 X5 YY 

我不确定如何以最有效的方式做到这一点,特别是在日期之后计算元素


其他可能的字符串

String str1 = "Alexander Evanston 05/02/1986 X5 YY" ;

2 个答案:

答案 0 :(得分:3)

要从字符串中获取三个部分,可以使用

^([A-Za-z. ]+) ((?:[0-9]{2}/){2}[0-9]{4}) (.*)$

Regular expression visualization

Debuggex Demo

名称是捕获组1,日期在2,“X”在3中。此正则表达式假定日期始终有效。如果您确实需要确保正确的日期,可以阅读this answer我写的关于使用正则表达式来验证数值范围的信息。

另请注意,虽然您可以使用\d代替[0-9],但[0-9]更为通用,因为\d可以捕获.NET中的非美国数字,例如。更多信息herehere


要获取“X”个数,只需将第三组拆分,然后计算结果数组元素:

int xPieceCount = matcher.group(3).split(" ").length();

答案 1 :(得分:2)

试试这个

首先找到日期模式(DD / MM / YYYY),然后让其他人也尽可能简单。

    String str1 = "Peter L. Douglas 04/02/1984 X1 X5 YY";
    Pattern pt = Pattern.compile("\\d\\d/\\d\\d/\\d\\d\\d\\d");

    Matcher m = pt.matcher(str1);

    if (m.find()) {
        System.out.println(str1.substring(0, m.start()).trim());
        System.out.println(m.group());
        System.out.println(str1.substring(m.end()).trim().split("\\s+").length);
    }

输出

Peter L. Douglas
04/02/1984
3
相关问题