Regex 从压缩文件中获取原始文件名
我已压缩文件名,如:Regex 从压缩文件中获取原始文件名,regex,perl,Regex,Perl,我已压缩文件名,如: filename1.csv.Z filename2.csv.gz 我有用于获取最后一个扩展名的正则表达式: my ($ext) = $file =~ /(\.[^.]+)$/; 现在我想获得原始文件名,不带.Z或.gz,例如filename1.csv、filename2.csv 我试着使用下面的expresion之类的东西,但不起作用 my ($output) = $file =~ /.+?(?=(([^.]+)$))/; 有人能帮我吗?在你的模式中。+??=[^.]
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
在您的模式中。+??=[^.]+$您断言直接在右边的是1+倍,而不是后跟字符串末尾的点
这个断言可能在多个地方都是正确的,还将包括匹配点本身
例如,在filename2.csv.gz中,将匹配filename2.csv。和g
如果只想获得示例数据中文件名的匹配,可以在正向前瞻中添加点:
.+(?=\.[^.]+$)
(.+)\.[^.]+$
或者使用捕获组和匹配,而不是前瞻:
.+(?=\.[^.]+$)
(.+)\.[^.]+$
|
比如说
my $line = "filename1.csv.Z";
my ($output) = $line =~ m/(.+)\.[^.]+$/;
print $output;
# filename1.csv
了解您的标准库。见:
了解您的标准库。见:
如果这是匹配项\.[^.]+$您可以用空字符串替换它,或者使用捕获组。+?\.[^.]+$也许删除已知后缀就足够了$file=~s/\.?:Z | gz$/?@Wiktor Stribiżew my$output=$file=~s/\.?:Z | gz$/;打印$输出;返回1。我在这里做错了什么吗?请参阅。如果这是匹配\.[^.]+$您可以将其替换为空字符串或使用捕获组。+?\.[^.]+$也许删除已知后缀就足够了$file=~s/\.?:Z | gz$/?@Wiktor Stribiżew my$output=$file=~s/\.?:Z | gz$/;打印$输出;返回1。我做错什么了吗?看。