正则表达式优化需求:识别含三个连字符的光盘文件名
优化后的正则表达式方案
针对你需要识别包含三个连字符(中间可选整数)的光盘文件名需求,你原来的正则通过枚举所有场景实现,确实不够简洁高效。可以利用\d*(匹配0个或多个数字,对应“整数或无内容”)合并所有情况,优化后的正则如下:
string sRegex = @"-\d*-\d*(?:-|\.)";
正则说明:
-\d*-:匹配第一个连字符,后跟可选整数(或空内容),再跟第二个连字符\d*:匹配第二个可选整数(或空内容)(?:-|\.):匹配结尾的连字符或点(覆盖模式在文件名中间-xxx-或末尾-xxx.ts的场景,?:表示非捕获组,减少不必要的内存开销,提升匹配效率)
匹配验证
该正则可完美匹配你给出的示例文件名:
Ice Cold Murders- Rocco Schiavone-1-5.ts→ 匹配-1-5.部分Lost Girl---Where There's a Will, There's a Fae_Pick_2019_04_09_20_00.ts→ 匹配---部分Lost Girl-1-4-Food For Thought_Pick_2019_04_15_20_00.ts→ 匹配-1-4-部分
如果后续需要提取季数和集数,可以调整为带捕获组的版本(方便直接获取整数内容):
string sRegex = @"(-?\d*)-(-?\d*)(?:-|\.)";
捕获组$1对应第一个整数(季数),$2对应第二个整数(集数),空值则代表无对应编号。
内容的提问来源于stack exchange,提问作者Tony Vaughan
相关产品推荐
相关产品推荐

