我试图在Java中匹配最后一次出现的人员工作年终。
1995年6月 - 2003年6月(8年1个月)将返回2003年
1989年 - 1995年6月(6年)将返回1995年
信息总是采用这种格式,所以我想如果我从字符串的末尾开始并查找前4位但我不知道如何做到这一点 我知道\ b \ d {4} \ b匹配前4位数,但我要求最后一次出现4位数。
答案 0 :(得分:2)
您可以使用此负前瞻性正则表达式:
HashMap
如果没有跟随字边界包围的另外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
:
(遗憾的是,不支持Java),或将您的模式包装在捕获组中:
并访问代码中的组:
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));
}