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

正则表达式优化:如何将匹配的右括号归入前捕获组

解决方案

要实现你需要的匹配逻辑,只需调整正则的分支结构,单独处理)作为分隔符的情况,修改后的正则如下(启用不区分大小写匹配):

(?<prefix>.+)(?:(?<sep>[)])(?<suffix>[a-z])|(?<suffix>[ ._-]+[a-z]))(?<ext>\.[^.]+)$

正则说明

  • 使用命名捕获组让结果更清晰:
    • prefix:对应你需要的捕获组1,即扩展名前的主体部分;
    • suffix:对应原来的捕获组2,即末尾的字母(或分隔符+字母);
    • ext:文件名的扩展名。
  • 分支结构(?:...|...)处理两种场景:
    1. 当末尾是)+字母时:(?<sep>[)])(?<suffix>[a-z])会把)归到主体部分(prefix会自动包含这个),因为.+会贪婪匹配到)为止),只把字母放入suffix;
    2. 当末尾是-、_、.、空格+字母时:(?<suffix>[ ._-]+[a-z])会把分隔符和字母一起放入suffix,prefix停在分隔符之前。

测试验证

  1. 对于示例The.Chronicles-A.mp4:

    • prefix: The.Chronicles
    • suffix: -A
    • ext: .mp4
      完全符合你的预期。
  2. 对于示例The.Chronicles.(2001)A.mp4:

    • prefix: The.Chronicles.(2001)
    • suffix: A
    • ext: .mp4
      成功将)归入了主体部分(prefix),满足你的需求。

如果你更习惯使用数字捕获组,也可以用以下版本:

(.+)(?:([)])([a-z])|([ ._-]+[a-z]))(\.[^.]+)$
  • 数字组对应关系:
    • 组1:主体部分(对应命名组prefix);
    • 组3/组4:末尾的字母或分隔符+字母(对应命名组suffix,二选一有值);
    • 组5:扩展名(对应命名组ext)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:25:57