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

时间:2015-03-17 06:35:03

标签: java regex

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

例如:完整路径是: /Dir1/Dir2/Dir3/Dir4/Dir5/Dir6/fileName_20150108_002_20150109013841.csv 我的Regex输出应该是fileName.csv。

目录的扩展和级别不固定。

作为我的要求的一部分,我需要单个正则表达式,它可以提取fileName.csv而不是fileName_20150108_002_20150109013841.csv.how我能用单个正则表达式吗?

3 个答案:

答案 0 :(得分:0)

以下可能适用于你

[^\\/:*?"<>|\r\n]+$

这个正则表达式已经在这两个例子上进行了测试:

\变种\ WWW \ www.example.com \的index.jsp \ index.jsp的

或者更确切地说,您应该使用File.getName()来获得更好的方法。

String filename = new File("Payload/brownie.app/Info.plist").getName();
System.out.println(filename)

另一种方式是

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

答案 1 :(得分:0)

不使用正则表达式,这可以解决为 -

public static String getFileName(String args){ args = args.substring(args.lastIndexOf('/')+1); return args.substring(0,args.indexOf('_')) + args.substring(args.indexOf('.')); }

答案 2 :(得分:0)

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

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

}