Regex обрезать путь к последней папке и файлу - PullRequest
0 голосов
/ 21 декабря 2011

То, что у меня есть, это:

E:\folder\00000000\file.txt

, и я хочу получить это:

00000000\file.txt

Проблема в том, что я зацикливаюсь на списке этих каталогов и мне нужно удалить егодля каждого, а не только для каталога 00000000, потому что следующим является 00000001, и поэтому один

Регулярное выражение, которое я придумал, выглядит так:

.+\\00000000    

, что дает мне следующее:

\file.txt

Любые идеи будут великолепны!

Спасибо!

Обновление: Дерьмо!Я запутался ...

То, что я хочу запечатлеть, противоположно этому:

E:\folder\

Так что я могу заменить его другим путем.Извините: - /

Ответы [ 4 ]

6 голосов
/ 21 декабря 2011

Этот шаблон будет работать: [^\\]+\\[^\\]+$

В нем говорится: любое количество символов без косой черты, затем косая черта, а затем еще косая черта и конец ввода или строка.

2 голосов
/ 21 декабря 2011

Вы имеете дело с путями. Используйте функции, предназначенные для работы с путями.

#!/usr/bin/env perl

use strict; use warnings;

use Path::Class;

my $path = Path::Class::File->new_foreign(
    Win32 => 'E:\folder\00000000\file.txt'
);

my $top = dir($path->volume, $path->parent->dir_list(0, 2));

print "$top\n";

Выход:

C:\Temp> t
E:\folder
0 голосов
/ 21 декабря 2011

Не обрезать, соответствовать!

$path = "E:\\folder\\00000000\\file.txt";
if ($path =~ /(\d+\\.*)$/) {  
    $result = $1;
    print $result;
} else {
    print "bad";
}
0 голосов
/ 21 декабря 2011

Попробуйте \\([^\\]+\\[^\\]+)$ и захватите $1 / \1

Это разбивается на:

  • обратная косая черта;
  • Keep:
    • не менее 1 без обратной косой черты;
    • обратная косая черта;
    • не менее 1 без обратной косой черты;
  • конец строки

N.B. что даже если вы работаете в Windows, вы все равно можете использовать стандартную косую черту в именах файлов, поэтому, если у вас нет контроля над форматом входящих имен файлов, вы можете вместо этого использовать:

 [\\\/]([^\\\/]+\\[^\\\/]+)$

… так как это будет принимать либо \ или / в качестве разделителей пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...