繁体   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