Java Reg表达式排除(非单词字符)

时间:2017-07-27 17:18:29

标签: java regex expression

您好我是reg表达式的新手,我正在尝试重命名复杂的文件名,如下所示:

3-M-COLORADOW-22017DB-LABEL

我想使用java reg表达式将此文件名重命名为:

3-M-COLORADOW-LABEL

然而,根据我目前对Java Reg表达式的了解,我只能做到这一点:

enter image description here

我尝试了很多组合但没有成功。我只需要帮助找到正确的java reg表达式组合来实现我的目标。基本上我正试图采取其中一个(破灭)。任何帮助将不胜感激。

    for(File file:filesInDir) {
        //x++;
        String name = file.getName();
        String newName = name;
        String sameName = name;
        if (name.contains("LABEL")){
           newName = sameName.replaceAll("(.*)-(.*)(-LABEL)", "$1$3") ; 
           System.out.println(newName); // prints prints to file 
           String newPath = absolutePathOne + "\\" + newName;
            file.renameTo(new File(newPath)); 
        }
    }

2 个答案:

答案 0 :(得分:2)

您可以将replaceAll用于以下组:

String str = "3-M-COLORADOW-22017DB-LABEL".replaceAll("(.*)-(.*)(-LABEL)", "$1$3");

输出

3-M-COLORADOW-LABEL

regex demo

答案 1 :(得分:1)

由于您没有提供有关文件名结构的大量信息,因此我假设您要过滤掉后跟字母的数字。您可以使用以下正则表达式:

(.*)-\d+\D+(-.*) // java-syntax: "(.*)-\\d+\\D+(-.*)"

Matcher

Pattern pattern = Pattern.compile("(.*)-\\d+\\D+(-.*)");
Matcher matcher = pattern.matcher(oldFilename);
if (matcher.matches) {
    String newFilename = m.group(1) + m.group(2);
}