将基本文件名与扩展名分开

(注意:不一定必须使用正则表达式)例如我的字符串是

my $str = "namefile.json.bz2"

我只想要主文件名 namefile

我尝试的正则表达式是^([^?=b(.bz2)b]*)
如果我的字符串(文件名不包含 b、z 或 2.

如果my $str = "bigzoom.jzon.bz2"它会失败,因为它找到了字符“b”。是否有更好的正则表达式来完全匹配.bz2

供参考:https : //regex101.com/r/oRvMVL/1

编辑:扩展列表很多。因此,正则表达式必须匹配所有这些扩展名(以 OR 格式)例如,^([^?=b(.bz2)b | b(.json)b | b(.txt)b | b(.log)b]*)如果需要,我稍后可以更新更多扩展名。但这就是问题所在。获取没有任何扩展名的文件名。

回答

如果您想使用不是扩展名的文件名的“主要”部分,请使用这个简单的正则表达式。

# Grab everything up to the first dot character
(my $mainname) = $filename =~ m/^([^.])+/;

如果您想删除已知的文件扩展名,只需使用它。

# Remove this exact string.
$filename =~ s/.json.bz2$//i;

有关执行此操作的官方方法,请参阅File::Basename模块。

use File::Basename;

print fileparse("/foo/bar/name.json.bz2", qr/..*/);

# ---
# ("name", "/foo/bar/", ".json.bz2")

# or
print fileparse("/foo/bar/name.json.bz2", qr/.[^.]*/);

# ---
# ("name.json", "/foo/bar/", ".bz2")


以上是将基本文件名与扩展名分开的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>