如何制作匹配电视节目文件格式中所有可能的剧集编号的正则表达式?

Con*_*nor 4 regex

我想创建一个正则表达式来匹配电视节目文件格式中所有可能的剧集编号格式。

这里的相关帖子,仅匹配以下格式:S1E1,S11E1,S1E11,S11E11。

我想匹配以下格式:episode01、episode 01、episode1、episode 1、e01、e1、e0102、e01-02、e01e02、e01-e02、e111、e001002、e1-e2、e001-e002。

我目前有这个正则表达式,它匹配大多数但不是全部示例列表。

(?:(?<=e)|(?<=episode)|(?<=episode[\.\s]))(\d{1,2})|((?<=-)\d{1,2})
Run Code Online (Sandbox Code Playgroud)

它不匹配的是当有两集紧接着另一集e0102应该匹配01和时02

您可以在此处找到包含测试用例的正则表达式示例

Jvd*_*vdV 5

根据您的评论,我做了以下假设:

  • 剧集编号永远不会超过三位数;
  • 因此,当剧集字符串表示一系列剧集时,其长度可能为1-3 位数字也可能为4或6 位;
  • 假设一系列剧集中的两个数字都使用相同的填充,则永远不会有 5 位整数;
  • 这意味着 46 位数字的长度需要平均分割。

因此,请尝试以下操作:

e(?:pisode)?\s*(\d{1,3}(?!\d)|\d\d\d??)(?:-?e?(\d{1,3}))?(?!\d)
Run Code Online (Sandbox Code Playgroud)

是一个在线演示。您会注意到我添加了更多示例来展示上述假设。


  • e(?:pisode)?\s*- 匹配 'e''episode' 以及 0+ 尾随空白字符;
  • (\d{1,3}(?!\d)|\d\d\d??)- 第一个捕获组捕获 1-3 个数字(如果后面没有任何其他数字两个数字);
  • (?:-?e?(\d{1,3}))?- 可选的非捕获组,带有嵌套的第二个捕获组,寻找可选的连字符和带有尾随数字 (1-3) 的文字“e”;
  • (?!\d)- 没有留下尾随数字。