首先,我知道stackoverflow中有大量的正则表达式线程,我检查了一堆,但是这里真的很难匹配正确的句子。
我目前要做的是匹配这些字符: - a-z - A-Z - 0-9 - 。()〜-_ []
基于此正则表达式,将在此之后执行的操作是替换此处不匹配的所有字符。
我使用的文件名为例: - 12345677-fieberthermometer-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0 @#$%“& *()!ßöäüÄÜÖ”'] [} {<>:;,º.jpg
private static final String FOLDER = "/path/to/my/folder";
private static final String URL_VALID_REGEX = "a-zA-Z0-9\\.\\(\\)\\[\\]\\-~_";
public static void main(String[] args) {
File imagesDirPath = new File(FOLDER);
Pattern p = Pattern.compile("[" + URL_VALID_REGEX + "]");
final String[] listImages = imagesDirPath.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
Matcher m = p.matcher(name);
if (!m.matches()){
File renamedFile = new File(FOLDER + File.separator + name);
name = name.replaceAll("[^" + URL_VALID_REGEX + "]", "");
renamedFile.renameTo(new File(FOLDER + File.separator + name));
}
System.out.println(name);
final String extension = FilenameUtils.getExtension(name);
final boolean isAcceptedExtesion = getAcceptedFileFormatList().contains(extension);
final long lastModified = new File(dir, name).lastModified();
return isAcceptedExtesion;
}
});
}
正如你在代码中看到的那样,字符的替换发生时正则表示有效的正则表达式,但我也不确定它是不是应该如何,因为所有的匹配总是为假。
第一个问题:即使文件名正确,匹配也始终为false,这会导致创建新文件并更改上次修改日期,这对于保持相同非常重要
第二个问题:逗号和星号始终保留在文件名中,但这也可能是错误的正则表达式
有效名称的示例: - 12345677-fieberthermometer-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0_~()] [。jpg
我在这里找不到我无法找到的东西?
答案 0 :(得分:-1)
我在记事本++中复制了它,但我会尝试在java中完成它。
几乎没有问题。您应该匹配有问题的字符,如果找到这些字符,请替换它们。使用find()而不是匹配,因为您不需要匹配整个字符串。
在记事本中,我只需用“”替换[^ a-zA-Z0-9。()[] \ - ~_] +,我得到你想要的东西。
在java中
import java.util.regex.*;
public class HelloWorld{
public static void main(String[] args) {
String wrong="12345677-fieberthermometer-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0@#$%\"&*()!ßöäüÄÜÖ\"'][}{<>:;,º.jpg";
String pattern="[^a-zA-Z0-9\\.\\(\\)\\[\\]\\-~_]+";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(wrong);
if (m.find()){
right = wrong.replaceAll(pattern, "");
System.out.println(right);
}
}
}