Java提取子字符串

时间:2018-10-29 12:48:27

标签: java pattern-matching

我有几个文件,

  

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

2 个答案:

答案 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

拆分的第二项是扩展名