首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Perl中的字符串中删除文件扩展名和路径

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

Stack Overflow用户
提问于 2010-09-08 20:47:41
回答 3查看 68.5K关注 0票数 36

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

例如:

代码语言:javascript
复制
/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新手。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-08 20:54:12

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

要对文件扩展名进行启发式分析,我会使用正则表达式,例如

代码语言:javascript
复制
(my $without_extension = $basename) =~ s/\.[^.]+$//;
票数 42
EN

Stack Overflow用户

发布于 2010-09-08 21:03:11

尽管其他人也做出了回应,但在阅读了一些关于basename per rafl的答案后:

代码语言:javascript
复制
($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"

似乎可以一气呵成地解决问题。

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

票数 23
EN

Stack Overflow用户

发布于 2010-09-08 20:54:51

假设路径分隔符是'/',您可以使用一对substitutions完成此操作

代码语言:javascript
复制
$name =~ s{^.*/}{};     # remove the leading path  
$name =~ s{\.[^.]+$}{}; # remove the extension

你也可以把它写成一个单一的替换:

代码语言:javascript
复制
$name =~ s{^.*/|\.[^.]+$}{}g;
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3667859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档