如何在脚本中获取第一个日期

时间:2017-09-28 13:57:48

标签: regex

我的文字行如下。我只想要考试日期之后的第一个日期,以便预期的输出是10.08.2017

Examination Date 

date:  10.08.2017 
423432

tert
g

534534

Examination Date: 04-07-2017 

到目前为止,我已尝试过:

Examination Date.*?\d{2}.?{2}?.\d{4}

但我将整个结果发送到04-07-2017

1 个答案:

答案 0 :(得分:2)

通过在\d之前添加{2}?来修复模式,并删除不必要的? s abd捕获您需要的值:

String s = "Examination Date \n\ndate:  10.08.2017 \n423432\n\ntert\n\ng\n\n534534\n\nExamination Date: 04-07-2017";
Pattern pattern = Pattern.compile("Examination Date.*?\\b(\\d{2}\\W\\d{2}\\W\\d{4})\\b", Pattern.DOTALL);
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
    System.out.println(matcher.group(1)); // => 10.08.2017
} 

请参阅Java demoregex demo。在代码中,您只能使用if时的第一个匹配,而不是while,而.会因Pattern.DOTALL修饰符而匹配换行符。

<强>详情

  • Examination Date - 文字子字符串
  • .*? - 任意0个字符,尽可能少
  • \\b - 一个单词边界(如果您不关心将日期作为“整个”单词匹配,请删除\\b
  • (\\d{2}\\W\\d{2}\\W\\d{4}) - 第1组:
    • \\d{2} - 2位数
    • \\W - 任何非单词字符(标点符号,空格,符号)
    • \\d{2}\\W - 如上所述
    • \\d{4} - 4位数
  • \\b - 一个尾随字边界。