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

时间:2017-12-24 12:37:20

标签: java regex

我需要过滤掉以“_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

我做错了什么?

1 个答案:

答案 0 :(得分: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")
);