V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FrankAdler
V2EX  ›  程序员

求教一个正则的写法

  •  
  •   FrankAdler · 307 天前 · 1436 次点击
    这是一个创建于 307 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最后一个,匹配到第 3 季,但其实希望走到S03E01,开发语言是 GoLang ,用的 regexp.Compile 和 FindStringSubmatch

    正则:

    (?i)((?:s|第|season)([0-9]+)(?:季|)(?:.|_|x|-| |))?((?:第|e|ep|p|episode)([0-9]+)(?:集|)).+$
    

    用例:

    "[堕落].The.Fall.2013.S02.E03.Complete.BluRay.720p.x264.AC3-CMCT.mkv":           {2, 3},
    "Agent.Carter.S02E01.1080p.BluRay.DD5.1.x264-HDS.mkv":                           {2, 1},
    "[壹高清]21 点灵.Leave No Soul Behind.Ep01.HDTV.1080p.H264-OneHD.ts":               {1, 1},
    "Kimetsu.no.Yaiba.Yuukaku-hen.E01.2021.WEB-DL.1080p.x264.AAC.mkv":               {1, 1},
    "宝贝揪揪 第 3 季 第 10 集.mp4":                                                   {3, 10},
    "宝贝揪揪 第 9 集.mp4":                                                             {1, 9},
    "Gannibal.E01.2022.mp4":                                                        {1, 1},
    "Gannibal S02 E11 2022.mp4":                                                    {2, 11},
    "Gannibal-S01-E02-2022.mp4":                                                     {1, 2},
    "Gannibal.Season01.EP02.2022.mp4":                                                {1, 2},
    "转生成自动贩卖机 02 全片简中.mp4":                                                  {1, 2},
    "地球脉动.第 3 季.Planet.Earth.S03E01.2023.2160p.WEB-DL.H265.10bit.DDP2.0.2Audio.mp4": {3, 1},
    
    9 条回复    2024-01-21 14:31:29 +08:00
    NoOneNoBody
        1
    NoOneNoBody  
       307 天前
    第 m 季 第 n 集,SmEn
    这两种写法一般不会同时出现,不如分开写再用“|”连起来,这样思路更简单些
    FrankAdler
        2
    FrankAdler  
    OP
       307 天前
    @NoOneNoBody 也是一种做法
    ns09005264
        3
    ns09005264  
       307 天前   ❤️ 1
    [img][/img]

    这个咋样
    ```
    ((第|s|season)\s*(\d+).*?季?)?(第|e|ep)\s*(\d+)
    ```
    group3 就是季,group3 是空的就是第一季
    group5 就是集
    ns09005264
        4
    ns09005264  
       307 天前
    @ns09005264 倒数第二行没法了,只能用额外的判断了。
    caomu
        5
    caomu  
       307 天前 via Android
    手中有锤子,看啥都是钉子。
    FrankAdler
        6
    FrankAdler  
    OP
       307 天前
    @ns09005264 貌似可以,感谢
    txican
        7
    txican  
       306 天前
    如果一定要完全用正则实现会增加很大复杂度, 还不利于你后期维护.
    如果冒出来一个处理不了的标题, 修改一大串正则会非常困难.
    转手给别人接手也困难, 看不懂; 转手给几个月之后的你自己也一样看不懂.
    如果你能有代码权限, 建议你多走几步逻辑.

    if 匹配 第 m 季 的正则
    m 赋值为季数
    else
    m = 1

    if 匹配 第 n 集 的正则
    n 赋值为集数


    if 不匹配 第 m 季 的正则 AND 不匹配 第 n 集 的正则 AND 文件名中只有一个数字
    n = 这个数字

    // 也许还有其它特殊情况需要处理, 比如标题中没有数字
    FrankAdler
        8
    FrankAdler  
    OP
       306 天前
    @txican 这个正则确实越写越复杂了,考虑拆分了
    sampeng
        9
    sampeng  
       306 天前 via iPhone
    问 chatgpt
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2765 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:05 · PVG 12:05 · LAX 20:05 · JFK 23:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.