正则表达式从Java中的完整路径中提取文件名并删除文件时间戳
我有完整的文件路径,我只需要提取文件名和扩展名。所以我的输出是fileName.csv 例如:完整路径为: /Dir1/Dir2/Dir3/Dir4/Dir5/Dir6/fileName\u 20150108\u 002\u 20150109013841.csv 我的正则表达式输出应该是fileName.csv 目录的扩展名和级别不是固定的正则表达式从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而不是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??如何在单个正则表达式中实现它