2017-07-27 34 views
0

您好我是新来reg表达式中,我试图重新命名像下面这样一个复杂的文件名:的Java reg表达式不包括(非字字符)

3-M-COLORADOW-22017DB-LABEL 

我想用重命名文件名添加到该java的reg表达式中:

3-M-COLORADOW-LABEL 

但是与Java注册表达我目前的知识开始我只得到了这一步:

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

可以使用的replaceAll与团体是这样的:

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

输出

3-M-COLORADOW-LABEL 

regex demo

+0

对不起将发布它上面 – Jonathan

+0

你可以请编辑您的问题@JonathanHofler在注释中的代码无法读取! –

+0

我用上面给出的解决方案之一发布了我的代码。 – Jonathan

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); 
} 
相关问题