我有如下压缩的文件名:
filename1.csv.Z
filename2.csv.gz
我有用于最后扩展名的正则表达式:
my ($ext) = $file =~ /(\.[^.]+)$/;
现在,我想获取“原始文件名”,例如不带.Z或.gz。filename1.csv,filename2.csv
我试图在下面使用类似expresion的方法,但是不起作用...
my ($output) = $file =~ /.+?(?=(([^.]+)$))/;
有人可以帮我吗?
在您的模式中,.+?(?=[^.]+$)
您断言直接在右边的是1+倍而不是一个点,然后是字符串的结尾。
该断言在多个地方可能是正确的,并且还将包括匹配点本身。
例如filename2.csv.gz
,它将匹配filename2.csv.
和g
如果只想获取示例数据中文件名的匹配项,则可以在正向前行中添加点:
.+(?=\.[^.]+$)
或使用捕获组和匹配项而不是先行匹配:
(.+)\.[^.]+$
例如
my $line = "filename1.csv.Z";
my ($output) = $line =~ m/(.+)\.[^.]+$/;
print $output;
# filename1.csv
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句