我嘗試創建一個正則表達式來捕獲兩個捕獲組之間的令牌。使用正則表達式從字符串中刪除可選的編號
示例輸入
Added experiencevalidator [Java] [Spring]
1. Added validators [Java] [Spring]
2. Fixed issues with deletes [JPA] [Java]
基本上我想捕捉的編號(1,2)和標籤之間的令牌([爪哇] [春季])。
預計捕獲
的匹配應返回每個相應行:
Added experiencevalidator
Added validators
Fixed issues with deletes
我目前使用此代碼,它利用積極的向前看符號和lookbehinds。
private Pattern TITLE_REGEX = Pattern.compile("(?<=\\d\\.\\s)(.*?)(?=\\[.*)");
private String cleanseTitle(String title){
Matcher m = TITLE_REGEX.matcher(title);
if(m.find()){
System.out.println("Match found");
System.out.println(m.group(1));;
}else{
System.out.println("No Match");
}
return title;
}
每一行被傳遞給經由標題參數的cleanseTitle
方法。我的問題是,我不知道如何處理編號前面沒有的行。該代碼當前處理正確編號前面的行,但不在編號前面的行返回不匹配。
任何人都可以提供一個正則表達式,它將處理以編號或行之前沒有編號的行嗎?我對任何正則表達式解決方案都很開放,我不愛上我目前的正則表達式,所以請隨時更改它。任何可以幫助我更多地瞭解正則表達式的附加說明也是值得讚賞的。
這就是我想要的。 @ fge的解決方案需要通過2個正則表達式來運行字符串。 – Falmarri
@Falmarri也許,但它可能更快。例如,我根本不需要使用捕獲組,我也不需要使用懶惰的量詞;)而且我也不需要使用lookarounds。最後,如果沒有任何匹配,我不需要做任何事情,而且匹配是「快速失敗」。 – fge
@stema這個解決方案的工作原理是,我打算在兩個測試中進行基準測試,我會發布結果並接受最快的測試。 –