我試圖匹配Java中最後一次出現的人員作業結束年份。匹配上一次出現的年份
1995年6月 - 2003年6月(8歲1個月)將返回2003
1989年 - 1995年6月(6年)會回到1995年
的信息總是以這種格式,所以我我想如果我從字符串的末尾開始並查找前4位數字,但我不知道如何執行此操作 我知道\ b \ d {4} \ b匹配前4位數字,但我需要最後一次出現4數字。
我試圖匹配Java中最後一次出現的人員作業結束年份。匹配上一次出現的年份
1995年6月 - 2003年6月(8歲1個月)將返回2003
1989年 - 1995年6月(6年)會回到1995年
的信息總是以這種格式,所以我我想如果我從字符串的末尾開始並查找前4位數字,但我不知道如何執行此操作 我知道\ b \ d {4} \ b匹配前4位數字,但我需要最後一次出現4數字。
匹配,那麼很多搶第二年:
[A-Za-z]+\\s\\d{4}\\s–\\s[A-Za-z]+\\s(?<year>\\d{4}).*
然後只需用matcher.group("year")
獲得的價值。
您可以使用該負前瞻正則表達式:
\bd{4}\b(?!.*\b\d{4}\b)
這將在線路匹配4個數字時,不跟其他4位數字的字邊界包圍它。
(?!.*\b\d{4}\b)
是否定性的前瞻以斷言在一行中當前位置之前沒有4位數字的數字。
在Java中,你可以使用:
String re = "\\bd{4}\\b(?!.*\\b\\d{4}\\b)";
我剛剛運行這個,但這不符合我的字符串。你有沒有使用Pattern和Matcher類? – NeptuneGamer
是的,你需要使用'Pattern'和'Matcher' APIs。你將需要使用'matcher.find()'來獲得匹配。你可以顯示你的代碼 – anubhava
它確定我修好了,我錯過了一些東西! – NeptuneGamer
爲了得到最後一次出現的模式,只需在其前面加上貪婪.*
即可。然後提取所需的圖案或者使用\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));
}
定義*不起作用。*。你有什麼問題? – Tunaki
你可以用'\ b \ d {4} \ b'來匹配所有的4位數值,並得到最後一個。只要繼續將找到的值分配給String var。 –