正则表达式不匹配文件名的结尾

问题描述 投票:0回答:1

我需要过滤掉以“_done”结尾的目录中的文件。 该目录包含三个.txt文件,即需要过滤掉的format1.txt,format2.txt和format2_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

我究竟做错了什么?

java regex
1个回答
0
投票

尝试使用这个正则表达式而不是.*_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")
);
© www.soinside.com 2019 - 2024. All rights reserved.