我正在嘗試使用 Java 模式匹配器在檔案擴展名之前提取四位數字。它沒有拋出任何組發現例外。有人可以幫我嗎?
String fileName = "20210101-000000_first_second_1234.csv";
Pattern pattern = Pattern.compile("\\\\d{4}");
System.out.println(pattern.matcher(fileName).group(4));
我想1234從檔案名中獲取。我使用 regex 編譯了檔案模式\\\\d{4}。回傳四個組。所以,第四組應該假設回傳1234沒有回傳,而不是拋出組未找到例外。
uj5u.com熱心網友回復:
"\\\\d{4}"字串文字定義了一個\\d{4}匹配\dddd字串(一個反斜杠,然后是四個d字符)的正則運算式。您嘗試訪問第 4 組,但您的正則運算式中沒有定義捕獲組。Matcher#find此外,在使用or實際運行匹配器之前,您無法訪問匹配組Matcher#matches。
您可以使用
String fileName = "20210101-000000_first_second_1234.csv";
Pattern pattern = Pattern.compile("\\d{4}(?=\\.[^.] $)");
Matcher m = pattern.matcher(fileName);
if (m.find()) {
System.out.println(m.group());
}
請參閱Java 演示和正則運算式演示。詳情:
\d{4}- 四位數(?=\.[^.] $)- 一個積極的前瞻,需要一個.字符,然后是一個或多個字符,而不是.直到字串結尾。
還要注意Matcher m = pattern.matcher(fileName)添加并if (m.find())檢查是否有匹配項。僅當存在匹配時,才能從第 0 組中檢索該值m.group()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/418910.html
標籤:
