You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用正则提取不带点的zip/tar/tar.gz文件扩展名(Java环境)

解决方案

方案1:调整分组结构(推荐)

直接把扩展名前的点移到分组外,让第二个分组直接捕获不带点的后缀,兼容你需要的zip/tar/tar.gz三种格式:
正则表达式:(.*)\.(tar(?:\.gz)?|zip)

  • 分组1:依旧匹配完整文件名(不含后缀)
  • 分组2:直接返回不带点的扩展名,不需要额外字符串处理
  • 非捕获组(?:\.gz)不会占用分组序号,完全保留你原有2个分组的使用习惯,不需要修改后续取分组的业务代码

Java使用示例:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ExtParseTest {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("(.*)\\.(tar(?:\\.gz)?|zip)");
        // 测试用例
        String[] testFiles = {"report.zip", "data.tar", "backup.tar.gz"};
        for (String file : testFiles) {
            Matcher matcher = pattern.matcher(file);
            if (matcher.matches()) {
                System.out.println("文件名:" + matcher.group(1));
                System.out.println("扩展名:" + matcher.group(2));
            }
        }
    }
}

输出结果:

文件名:report
扩展名:zip
文件名:data
扩展名:tar
文件名:backup
扩展名:tar.gz

方案2:零宽断言实现(不改动原有分组逻辑)

如果你不想调整原有分组的位置结构,可以用正向零宽后发断言,限定匹配内容的前一位是点,不需要额外捕获:
正则表达式:(.*)(?<=\.)(zip|tar\.gz|tar)
使用逻辑和方案1完全一致,分组2直接返回不带点的扩展名。

内容的提问来源于stack exchange,提问作者zepol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:54:03