从Perl中的字符串中删除文件扩展名和路径

时间:2010-09-08 12:47:41

标签: regex perl file-extension filepath

我想获取一个没有路径的文件名(如果它是字符串的一部分)以及扩展名。

例如:

/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的新手。

3 个答案:

答案 0 :(得分:37)

为了便于获取给定完整路径的文件的基本名称,我建议使用File::Basename模块,它是核心的一部分。

要对文件扩展名进行启发式操作,我会选择正常的表达式,例如

(my $without_extension = $basename) =~ s/\.[^.]+$//;

答案 1 :(得分:17)

虽然其他人已经回复了,但是根据rafl的答案读了一下basename:

($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"

似乎在一行中解决问题。

是否存在与此相关的问题,与其他解决方案相反?

答案 2 :(得分:14)

你可以通过简单的替换来做到这一点:

$name =~ s{.*/}{};      # removes path  
$name =~ s{\.[^.]+$}{}; # removes extension

此示例假定/是路径分隔符。