首页 文章

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

提问于
浏览
0

嗨,我是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 回答

  • 2

    你可以将replaceAll用于这样的组:

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

    产量

    3-M-COLORADOW-LABEL
    

    regex demo

  • 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);
    }
    

相关问题