2016-08-16 27 views
-2

我试图匹配Java中最后一次出现的人员作业结束年份。匹配上一次出现的年份

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

1989年 - 1995年6月(6年)会回到1995年

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

+1

定义*不起作用。*。你有什么问题? – Tunaki

+0

你可以用'\ b \ d {4} \ b'来匹配所有的4位数值,并得到最后一个。只要继续将找到的值分配给String var。 –

回答

1

匹配,那么很多抢第二年:

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

然后只需用matcher.group("year")获得的价值。

2

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

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

RegEx Demo

这将在线路匹配4个数字时,不跟其他4位数字的字边界包围它。

(?!.*\b\d{4}\b)是否定性的前瞻以断言在一行中当前位置之前没有4位数字的数字。

在Java中,你可以使用:

String re = "\\bd{4}\\b(?!.*\\b\\d{4}\\b)"; 
+0

我刚刚运行这个,但这不符合我的字符串。你有没有使用Pattern和Matcher类? – NeptuneGamer

+0

是的,你需要使用'Pattern'和'Matcher' APIs。你将需要使用'matcher.find()'来获得匹配。你可以显示你的代码 – anubhava

+1

它确定我修好了,我错过了一些东西! – NeptuneGamer

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

相关问题