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

电视剧文件名季集数正则匹配失败,请求技术排查

解决Shell脚本匹配文件名中季数集数的问题

我来帮你搞定这个匹配问题!你的脚本没匹配到预期的文件名,核心原因是Shell环境里的正则表达式不支持\d这个缩写来表示数字——这是很多编程语言(比如Python、JavaScript)里的写法,但在Shell的POSIX扩展正则里行不通。

问题分析

你原来的正则[sS][\d]+[Ee][\d]+,在Shell的=~匹配逻辑中,\d会被当作普通字符处理,相当于你在找s/S后面跟一个或多个\或d,再加上e/E和同样的\/d组合,这显然和S01E02这种数字格式完全不匹配,自然就没结果了。

修正方案

把正则里的[\d]替换成Shell正则支持的数字匹配方式即可,有两种常用写法:

  1. 使用[0-9]直接匹配0到9的数字:
    [sS][0-9]+[Ee][0-9]+
    
  2. 使用POSIX标准的数字字符类[:digit:](兼容性更好,适合不同系统):
    [sS][[:digit:]]+[Ee][[:digit:]]+
    

完整脚本示例

结合你的需求,修正后的脚本大概是这样的:

#!/bin/bash
folderToClean="/path/to/your/target/folder"

# 遍历目标文件夹下的所有.mkv文件
for file in "${folderToClean}"/*.mkv; do
    # 提取不带扩展名的文件名
    filename=$(basename "$file" .mkv)
    
    # 使用修正后的正则进行匹配
    if [[ "$filename" =~ [sS][0-9]+[Ee][0-9]+ ]]; then
        echo "✅ 匹配到季集信息: $filename"
        # 这里可以添加你后续的处理逻辑
    else
        echo "❌ 未匹配到季集信息: $filename"
    fi
done

额外优化(可选)

如果你的文件名里的季数和集数都是固定两位(比如S01E02而不是S1E2),可以把正则改成更严格的版本,避免匹配到不符合规范的内容:

[sS][0-9]{2}[Ee][0-9]{2}

测试验证

用你提到的My.TV.show.S01E02.1080p.mkv测试,修正后的正则会成功匹配到S01E02部分,脚本会输出匹配成功的提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:32:35