匹配年份的最后一次出现

时间:2016-08-16 08:42:44

标签: java regex

我试图在Java中匹配最后一次出现的人员工作年终。

1995年6月 - 2003年6月(8年1个月)将返回2003年

1989年 - 1995年6月(6年)将返回1995年

信息总是采用这种格式,所以我想如果我从字符串的末尾开始并查找前4位但我不知道如何做到这一点 我知道\ b \ d {4} \ b匹配前4位数,但我要求最后一次出现4位数。

3 个答案:

答案 0 :(得分:2)

您可以使用此负前瞻性正则表达式:

HashMap

RegEx Demo

如果没有跟随字边界包围的另外4个数字,则会匹配一行中的4位数。

\bd{4}\b(?!.*\b\d{4}\b) 是负面预测,断言在一行中当前位置之前没有4位数字。

在Java中,您可以使用:

(?!.*\b\d{4}\b)

答案 1 :(得分:1)

匹配该地段然后抓住第二年:

[A-Za-z]+\\s\\d{4}\\s–\\s[A-Za-z]+\\s(?<year>\\d{4}).*

然后只需使用matcher.group("year")获取值。

答案 2 :(得分:1)

为了获得模式的最后一次出现,只需在它前面添加一个贪婪的.*。然后使用\K

提取所需的模式

.*\K\b\d{4}\b

(遗憾的是,不支持Java),或将您的模式包装在捕获组中:

.*(\b\d{4}\b)

并访问代码中的组:

String input = "June 1995 – June 2003 (8 years 1 month)";
Pattern pattern = Pattern.compile(".*(\\b\\d{4}\\b)");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
    System.out.print(matcher.group(1));
}

演示:https://ideone.com/cMAvFH