【发布时间】:2013-06-08 11:56:43
【问题描述】:
我想读取文件夹中不包含.temp 作为扩展名的文件。我想为此使用正则表达式。您如何在正则表达式中使用排除项来做到这一点?
【问题讨论】:
我想读取文件夹中不包含.temp 作为扩展名的文件。我想为此使用正则表达式。您如何在正则表达式中使用排除项来做到这一点?
【问题讨论】:
这部分告诉寻找特定的字符数组:[0-9]。如果你想排除它,你只需在它前面添加一个^(暗示“不是”)。就像 [^0-9] 表示“不是数字”。
因此,要回答您的问题,您可以在正则表达式中包含以下内容:
^((?!\.temp).)*$
上面的这个正则表达式将匹配任何不包含 .temp 的行
【讨论】:
不要打扰,直接否定测试:
private static final Pattern NOTME = Pattern.compile("\\.temp$");
// in code
if (NOTME.matcher(input).find())
// illegal!
但实际上,您应该使用:
if (input.endsWith(".temp"))
// illegal
另外,如果您使用 Java 7,请放弃 File 并使用 Files 和 Path。
【讨论】:
知道它不是正则表达式,但为了便于阅读,我会使用
!fileName.endsWith(".temp")
【讨论】:
你可以尝试这样的事情,基于 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();
}
}
}
【讨论】: