所以我正在修剪一条看起来像这样的路径:
E:\folder\00000000\file.txt
我想用这个代替:
E:\folder\
我无法想出正则表达式。
之前我确实问了这个问题,但却把订单混在一起。
答案 0 :(得分:5)
使用正则表达式操作路径很糟糕。
use Path::Class::File qw();
my $path = Path::Class::File->new_foreign('Win32', 'E:\\folder\\00000000\\file.txt');
# E:\folder\00000000\file.txt
my $base = $path->parent->parent;
# E:\folder
答案 1 :(得分:2)
假设变量驱动器名称和文件夹只有下划线/连字符:
/^[A-Z]:\\(\w|_|-)+\\/
将匹配E:\folder\
答案 2 :(得分:1)
使用此正则表达式
^(.*[\\/])([^\\/]+[\\/][^\\/]+)$
$1
将等于E:\folder\
,$2
将等于00000000\file.txt
答案 3 :(得分:1)
use Path::Class qw( file dir );
my $file = file('E:\\folder\\00000000\\file.txt');
my $orig_base = dir('E:\\folder');
my $new_base = dir('F:\\directory');
# F:\directory\00000000\file.txt
say $file->relative($orig_base)->absolute($new_base);