我有几个文件,
“ reportD05S01.xml”,“ 2018.annualD01S02.pdf”, “ 2018.05.monthlyD01S03.pdf”等...
如何仅提取每个文件的前半部分,例如在“ reportD05S01.xml ”中,我只想获取“ 报告”和“ < strong> 2018.annualD01S02.pdf ”,仅“ 2018.annual ”等。所以基本上, D [some_numbers] S [some_numbers]。[extension]被抛开了。
这些文件位于目录中,我使用以下代码获取列表:
File dir = new File("/home/buddika/Inventory_Sales/Reports/");
File[] content = dir.listFiles();
并使用for循环遍历“ content”数组。 我尝试了此链接中可用于javascript see post的以下方法,但是没有运气。
Pattern pattern = Pattern.compile("/^(\\[.+\\])?(.+[^a-z0-9])(?=D\\d)", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(name);
如何使用Java使其成为可能? 任何帮助将不胜感激。
我当前的代码如下
File dir = new File("/home/buddika/Inventory_Sales/Reports/");
File[] content = dir.listFiles();
for(int i=0; i<content.length; i++){
String name = content[i].getName();
// extracting everything before department and section
Pattern pattern = Pattern.compile("(.*?)D\\d+S\\d+\\.[^.]*", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(name);
if(matcher.matches()){
System.out.println(matcher.group(1));
}
}
答案 0 :(得分:1)
您可以使用
^(.*)D\d+S\d+\.[^.]*$
请参见regex demo。
详细信息
^
-字符串的开头(.*)
-组1:尽可能多的除换行符以外的0+个字符D\d+
-D
和1个或更多数字S\d+
-S
和1个或更多数字\.
-一个点[^.]*
-除.
以外的0多个字符$
-字符串的结尾。这是在代码中使用它的方式:
Pattern pattern = Pattern.compile("(.*)D\\d+S\\d+\\.[^.]*", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(name);
if(matcher.matches()){
System.out.println(matcher.group(1));
}
答案 1 :(得分:0)
我不是regex方面的专家,但是我使用了在网上找到的以下代码,从完整的文件名中提取名称和扩展名:
String fullName = "2018.annualD01S02.pdf";
String name = fullName.split("\\.(?=[^\\.]+$)")[0];
System.out.println(name);
打印
2018.annualD01S02
拆分的第二项是扩展名