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

如何使用正则表达式获取不带扩展名的文件名?

匹配不带扩展名的特定文件名(适配GitHub Actions)

问题说明

需要匹配并提取不带扩展名的特定文件名,测试样本包括:

  • Test App 0.2.1.exe
  • dsdsad
  • Test App 0.2.1.dmg
  • Test App 0.2.1
    此前尝试正则^\S+\.(?:dmg)$匹配失败,目标是提取出Test App 0.2.1这类主文件名,最终将结果存入GitHub Actions变量,使用工具为actions-ecosystem-action-regex-match。

问题分析

你之前用的正则有两个核心问题:

  1. \S仅匹配非空白字符,而目标文件名包含空格,导致匹配直接中断;
  2. 该正则仅能匹配带.dmg扩展名的文件,无法处理无扩展名或带其他指定扩展名(如.exe)的场景。

解决方案

正则表达式

根据需求,推荐使用以下正则(支持匹配无扩展名、.dmg、.exe结尾的文件名,精准提取主文件名):

^(.+?)(?:\.(?:dmg|exe))?$

各部分含义:

  • ^ 锚定字符串开头
  • (.+?) 非贪婪捕获任意字符(包含空格),这部分就是我们需要的主文件名
  • (?:\.(?:dmg|exe))? 可选匹配.dmg或.exe扩展名,?:表示非捕获组(不保留扩展名部分),?表示该扩展名部分可省略
  • $ 锚定字符串结尾

如果只需要处理.dmg扩展名的场景,可简化为:

^(.+?)(?:\.dmg)?$

GitHub Actions配置示例

结合actions-ecosystem-action-regex-match的实际配置如下:

- name: 提取不带扩展名的文件名
  uses: actions-ecosystem/action-regex-match@v2
  id: extract-filename
  with:
    text: ${{ steps.generate-filename.outputs.file-name }} # 替换为实际的文件名变量
    regex: '^(.+?)(?:\.(?:dmg|exe))?$'

- name: 使用提取后的文件名
  run: echo "提取到的文件名:${{ steps.extract-filename.outputs.group1 }}"

通过steps.extract-filename.outputs.group1即可直接获取捕获到的主文件名。

测试验证

针对所有测试样本的提取结果:

  • Test App 0.2.1.exe → Test App 0.2.1
  • dsdsad → dsdsad
  • Test App 0.2.1.dmg → Test App 0.2.1
  • Test App 0.2.1 → Test App 0.2.1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:20:54