Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式从Java中的完整路径中提取文件名并删除文件时间戳_Java_Regex - Fatal编程技术网

正则表达式从Java中的完整路径中提取文件名并删除文件时间戳

正则表达式从Java中的完整路径中提取文件名并删除文件时间戳,java,regex,Java,Regex,我有完整的文件路径,我只需要提取文件名和扩展名。所以我的输出是fileName.csv 例如:完整路径为: /Dir1/Dir2/Dir3/Dir4/Dir5/Dir6/fileName\u 20150108\u 002\u 20150109013841.csv 我的正则表达式输出应该是fileName.csv 目录的扩展名和级别不是固定的 作为我的要求的一部分,我需要一个可以提取fileName.csv而不是fileName_20150108_002_20150109013841.csv的正则

我有完整的文件路径,我只需要提取文件名和扩展名。所以我的输出是fileName.csv

例如:完整路径为: /Dir1/Dir2/Dir3/Dir4/Dir5/Dir6/fileName\u 20150108\u 002\u 20150109013841.csv 我的正则表达式输出应该是fileName.csv

目录的扩展名和级别不是固定的


作为我的要求的一部分,我需要一个可以提取fileName.csv而不是fileName_20150108_002_20150109013841.csv的正则表达式。如何在单个正则表达式中实现

以下内容适用于您可能是

[^\\/:*?"<>|\r\n]+$
另一种方法是

int index = path.lastIndexOf(File.separatorChar);
String filename = path.substring(index+1);
最后,在获得完整文件名后,请使用下面的代码片段

String str = filename;// in your case filename will be fileName_20150108_002_20150109013841.csv
str = str.substring(0,str.indexOf('_'))+str.substring(str.lastIndexOf('.'));
System.out.println("filename is ::"+str); // output will be fileName.csv
如果不使用regex,这可以通过-

公共静态字符串getFileName(字符串参数)来解决{
args=args.substring(args.lastIndexOf('/')+1);
返回args.substring(0,args.indexOf(''.'))+args.substring(args.indexOf('.'));

}

在下面的代码中,第一组将是fileName\u timestamp.extension。我用空字符串替换了数字和下划线。这可能看起来很难看,但仍然符合你的目的。如果文件名包含数字,我们需要使用不同的方法

String filename = new File("Payload/brownie.app/Info.plist").getName();
System.out.println(filename)
public static void main(String[] args) {

    String toBeSplitted = "/Dir1/Dir2/Dir3/Dir4/Dir5/Dir6/fileName_20150108_002_20150109013841.csv";
    Pattern r = Pattern.compile("(/[a-zA-Z0-9_.-]+)+/?");
    Matcher m = r.matcher(toBeSplitted);
    if(m.matches()){
     String s =  m.group(1).replaceAll("(/|[0-9]|_)", "");
    System.out.println(s);
    }

}

20150108\u 002\u 20150109013841
也是文件名的一部分。如果您先拆分它会更容易。您还应该尝试使用
文件
api。windows和Linux的文件分隔符是不同的。首先,这不是有效的java代码。接下来,不使用OP的示例输入。接下来,这也没有给出OP想要的。谢谢。。。我想根据我的要求使用正则表达式进行提取。。。。我试过用你给的正则表达式。。。但它并没有提取时间戳。。。。输出为文件名_20150108_002_20150109013841.csv。。。。而不是fileName.csv??我如何在单个正则表达式中实现它…谢谢。。。我想根据我的要求使用正则表达式进行提取。。。。我尝试了不同的正则表达式,但输出为文件名\u 20150108\u 002\u 20150109013841.csv。。。。而不是fileName.csv??如何在单个正则表达式中实现它