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

如何从文件名中精准提取含#/b的调号?技术方案问询

精准提取文件名中调号的正则方案

需求回顾

需要从文件名中提取**A-G(含#/b组合)**的调号,需满足以下规则:

  • 调号大小写不敏感
  • 调号不在文件名开头
  • 可位于()、[]内
  • 前缀仅允许非字母数字符号(如.、空格、-、*等)
  • 后缀可接符号、音频扩展名、数字(需截断),或min/maj/m/Min等字符(需截断)

优化后的正则方案

可以用单步正则直接捕获目标调号,无需二次过滤,表达式如下:

(?<![a-zA-Z0-9])([A-Ga-g][#b]?)(?:m(?:in(?:or)?)?|M(?:aj(?:or)?)?|\d|[^\w#b]|$)

正则规则拆解

  1. (?<![a-zA-Z0-9]):反向零宽断言,确保调号前没有字母或数字,严格符合前缀规则
  2. ([A-Ga-g][#b]?):核心捕获组,直接匹配目标调号:
    • [A-Ga-g]:匹配大小写不敏感的A-G音名
    • [#b]?:可选匹配升号#或降号b
  3. (?:...):非捕获组,匹配所有需要截断的后缀内容:
    • m(?:in(?:or)?)?|M(?:aj(?:or)?)?:覆盖所有大小写的min/maj/m/Minor/Major等调性后缀
    • \d:匹配数字,遇到数字立即截断
    • [^\w#b]|$:匹配非字母数字/#/b的符号(如.、-、空格)或文件名结尾,覆盖音频扩展名等场景

示例验证

对给定文件名测试,均可精准提取调号:

  • sample_F_one_shot.wav → 提取结果:F
  • sample_oneshot_F#maj.wav → 提取结果:F#
  • sample_Ab_one_shot.wav → 提取结果:Ab
  • sample_(Cm_min).aif → 提取结果:C
  • sample_*Bb123.rx2 → 提取结果:Bb

使用注意

  • 开启正则的大小写不敏感模式(如Python中re.IGNORECASE,JavaScript中加/i修饰符)
  • 提取时直接取第一个捕获组的内容即可,无需后续处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:37:12