代码之家  ›  专栏  ›  技术社区  ›  Chris

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

  •  28
  • Chris  · 技术社区  · 14 年前

    我想获得一个不带路径(如果它是字符串的一部分)的文件名和扩展名。

    例如:

    /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 回复  |  直到 11 年前
        1
  •  37
  •   Christopher Bottoms zerkms    11 年前

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

    要对文件扩展名进行启发式处理,我将使用类似于

    (my $without_extension = $basename) =~ s/\.[^.]+$//;
    
        2
  •  17
  •   Chris    14 年前

    尽管其他人也做出了回应,但在根据Rafl的回答读了一点basename之后:

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

    似乎解决了这个问题。

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

        3
  •  14
  •   Eugene Yarmash    14 年前

    您可以通过简单的替换来完成此操作:

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

    这个例子假设 / 是路径分隔符。