0

我想读取文件夹中不包含.temp扩展名的文件。我想为此使用正则表达式。您如何在正则表达式中使用排除项来做到这一点?

4

4 回答 4

3

这部分告诉寻找特定的字符数组:[0-9]。如果你想排除它,你只需在它前面添加一个^(暗示“不是”)。就像[^0-9]“不是数字”一样。

因此,要回答您的问题,您将在正则表达式中包含以下内容:

   ^((?!\.temp).)*$

上面的正则表达式将匹配任何不包含 .temp 的行

于 2013-06-12T11:35:03.593 回答
2

不要被打扰,只是否定测试:

private static final Pattern NOTME = Pattern.compile("\\.temp$");

// in code

if (NOTME.matcher(input).find())
    // illegal!

但实际上,您应该使用:

if (input.endsWith(".temp"))
    // illegal

此外,如果您使用 Java 7,请File放弃使用Filesand Path

于 2013-06-12T11:42:26.373 回答
0

知道它不是正则表达式,但为了便于阅读,我会使用

!fileName.endsWith(".temp")
于 2013-06-12T11:42:00.657 回答
0

你可以尝试这样的事情,基于 Java 的 FilenameFilter 接口:

package dk.tbsalling;

import java.io.File;
import java.io.FilenameFilter;

public class FileDemo {
   public static void main(String[] args) {

      File f = null;
      File[] paths;

      try{      
         f = new File("d:/tmp");

         FilenameFilter fileNameFilter = new FilenameFilter() {

            @Override
            public boolean accept(File dir, String name) {
               return name.matches(".+(?<!\.temp)");
            }
         };

         paths = f.listFiles(fileNameFilter);

         for(File path:paths)
         {
            System.out.println(path);
         }
      }catch(Exception e){
         e.printStackTrace();
      }
   }
}
于 2013-06-12T11:43:57.757 回答