2015-03-17 2 views
-1

У меня есть полный путь к файлу, и мне просто нужно извлечь имя файла и просто расширение. Таким образом, мой вывод будет fileName.csv.Regex для извлечения имени файла и удаления временной метки файла из полного пути в Java

Для экс: полный путь: /Dir1/Dir2/Dir3/Dir4/Dir5/Dir6/fileName_20150108_002_20150109013841.csv Моего выхода Regex должен быть fileName.csv.

Расширение и уровень каталогов не фиксированы.

Как часть моего требования Мне нужно одно регулярное выражение, которое может извлечь fileName.csv not fileName_20150108_002_20150109013841.csv.how я могу сделать это в одном регулярном выражении?

+1

File.getName()? – Paul

+1

'20150108_002_20150109013841' также является частью * filename * – TheLostMind

+1

Было бы проще, если бы вы начали с разбивки на него в первую очередь. – ChiefTwoPencils

ответ

0

Ниже будет работать для вас может быть

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

Это регулярное выражение было протестировано на этих двух примерах:

\ вар \ WWW \ www.example.com \ index.jsp \ индекс. 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 
+0

to downvoter объясняет причину пустого голосования –

+1

Прежде всего, это НЕВОЗМОЖНЫЙ код Java. Затем это не использует ввод выборки OP. Далее, это также не дает того, чего хочет OP. – TheLostMind

+0

@TheLostMind спасибо за информацию приятель проверить мой обновленный ответ –

0

без использования регулярных выражений это может быть решена, как -

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

+0

Спасибо ... Я хочу использовать Regex для извлечения в соответствии с моим требованием .... Я пробовал разные регулярные выражения, но вывод - fileName_20150108_002_20150109013841.csv .... вместо fileName.csv ?? как я могу это сделать в одном регулярном выражении – code1234

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

} 
Смежные вопросы