簡體   English   中英

正則表達式與文件名末尾不匹配

[英]Regex not matching the end of a filename

我需要過濾出以“ _done”結尾的目錄中的文件。
該目錄包含三個.txt文件,即需要過濾掉的format1.txtformat2.txtformat2_done.txt

下面的示例正確列出了所有文件:

System.out.println("all files: ");
String[] files = folder.list();
for (String item : files) {
    System.out.println(item);
}

輸出:

all files: 
format1.txt
format2.txt
format2_done.txt

但是以下示例:

System.out.println("filtered: ");
String[] filteredFiles = folder.list((File folder, String name) 
                         -> {return !(name.matches("_done.txt>"));});

for (String item : filteredFiles) {
    System.out.println(item);
}

產生相同的輸出,不過濾任何內容:

filtered: 
format1.txt
format2.txt
format2_done.txt

我究竟做錯了什么?

嘗試改用此正則表達式.*_done\\\\.txt$如下所示:

String[] filteredFiles = folder.list((File folder, String name)
        -> !name.matches(".*_done\\.txt$")
);

細節 :

  • .*零個或多個字符
  • 后面跟着_done\\\\.txt ,請注意,您應使用\\\\轉義點
  • $結束錨

或者,您可以只使用String :: endsWith

String[] filteredFiles = folder.list((File folder, String name)
        -> !name.endsWith("_done.txt")
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM