电视剧文件名季集数正则匹配失败,请求技术排查
解决Shell脚本匹配文件名中季数集数的问题
我来帮你搞定这个匹配问题!你的脚本没匹配到预期的文件名,核心原因是Shell环境里的正则表达式不支持\d这个缩写来表示数字——这是很多编程语言(比如Python、JavaScript)里的写法,但在Shell的POSIX扩展正则里行不通。
问题分析
你原来的正则[sS][\d]+[Ee][\d]+,在Shell的=~匹配逻辑中,\d会被当作普通字符处理,相当于你在找s/S后面跟一个或多个\或d,再加上e/E和同样的\/d组合,这显然和S01E02这种数字格式完全不匹配,自然就没结果了。
修正方案
把正则里的[\d]替换成Shell正则支持的数字匹配方式即可,有两种常用写法:
- 使用
[0-9]直接匹配0到9的数字:[sS][0-9]+[Ee][0-9]+ - 使用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
相关产品推荐
相关产品推荐

