2016-08-16 59 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

相關問題