我想要获得一个不带路径(如果它是字符串的一部分)和扩展名的文件名。
例如:
/path/to/file/fileName.txt # results in "fileName"
fileName.txt # results in "fileName"
/path/to/file/file.with.periods.txt # results in "file.with.periods"
因此,基本上,我想删除前面的所有内容,包括最后一个"/“(如果存在)和最后一个”“。以及其后的任何元字符。
对于这样一个新手问题,我很抱歉,但我是perl新手。
发布于 2010-09-08 20:54:12
为了方便地获取给定完整路径的文件的基名,我建议使用File::Basename
模块,它是内核的一部分。
要对文件扩展名进行启发式分析,我会使用正则表达式,例如
(my $without_extension = $basename) =~ s/\.[^.]+$//;
发布于 2010-09-08 21:03:11
尽管其他人也做出了回应,但在阅读了一些关于basename per rafl的答案后:
($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"
似乎可以一气呵成地解决问题。
与其他解决方案相比,是否存在与此相关的问题?
发布于 2010-09-08 20:54:51
假设路径分隔符是'/'
,您可以使用一对substitutions完成此操作
$name =~ s{^.*/}{}; # remove the leading path
$name =~ s{\.[^.]+$}{}; # remove the extension
你也可以把它写成一个单一的替换:
$name =~ s{^.*/|\.[^.]+$}{}g;
https://stackoverflow.com/questions/3667859
复制相似问题