我正在尝试删除Ist部分和文件名的最后一部分。
我的文件名如/external/prop/new/test/File.Name.will.BE.this.extension.date
我想删除目录的第一部分(/external
)和文件扩展名的最后一部分(.date
),这样我的输出文件名就是/prop/new/test/File.Name.will.BE.this.extension
例如:
/external/prop/new/test/FACL.Prop.for.BBG.txt.09242012
新文件名:/prop/new/test/FACL.Prop.for.BBG.txt
旧文件名称:/external/prop/old/test/set2/FACL.Prop.FITCH.csv.09242012
/prop/old/test/set2/FACL.Prop.FITCH.csv
我曾尝试过像
这样的东西my($FinalName, $Finalextension) = split /\.(?!.*\.)/, substr($Fname,$Flength);
但它没有多大帮助。
/external
将始终保持不变,但日期将始终有所不同,我不能只删除数字,因为.extension可以是数字。
答案 0 :(得分:2)
$Fname =~ s|^/external||; # Remove leading "external" from path
$Fname =~ s|\.\d{8}$||; # Remove date from end of filename
答案 1 :(得分:1)
my $qfn = '/external/prop/new/test/FACL.Prop.for.BBG.txt.09242012';
$qfn =~ s{\.[^.]*\z}{}; # Remove last "extension".
$qfn =~ s{^/[^/]+}{}; # Remove first part of path.
答案 2 :(得分:1)
尝试使用此正则表达式捕获$1
中所需的文本:
^\/[^/]+(.*?)\.\d{8}$
这假定您的日期总是8个数字。您可以使用适当的日期正则表达式替换最后\d{8}
。
这可以在RegExr here中进行测试。
正则表达式分手:
^\/
匹配行的开头,后跟正斜杠
(转义)[^/]+
匹配所有文本,直到找到下一个正斜杠(to
标记/external
)(.*?)
匹配AND捕获非贪婪的所有文本,直到找到最后一个模式\.\d{8}$
匹配最后一个句点,后跟8位数日期,后跟行尾