python - 在Python中使用正则表达式从文件名中获取剧集编号

标签 python regex

这些年来我在媒体服务器上收集了大量的电视剧。我编写了一个脚本来检查并使用正确的文件名方案重命名它们,但是在尝试针对多个命名方案时,我在正则表达式方面遇到了一些问题。

这是我当前的函数,它非常适合使用方案“s01e01”从文件名中获取剧集编号

def getEpisode(filename):
    matches = re.findall(r"e[0-9][0-9]", filename)
    if len(matches) == 1:
        episode = matches[0]
        episode = stripEp(episode)
        return episode  
    else:
        return False

def stripEp(target):
    target = target.strip()
    target = target.strip('abcdefghijklmnopqrstuvwxyz.')
    return target

我需要做的是当使用多个方案时从文件名中获取剧集编号。我花了一段时间谷歌搜索并尝试了以下方法。

matches = re.findall(r"(e[0-9][0-9]|E[0-9][0-9]|x[0-9][0-9]|X[0-9][0-9]|episode [0-9][0-9]|Episode [0-9][0-9]|\n[0-9][0-9])", filename)

这适用于正则表达式测试器,例如 RegexPal和Python Regex Tool

但是,当我将其插入我的函数时,它不起作用。这让我很困惑,因为它似乎可以在我上面链接的 python 正则表达式工具中工作。任何帮助将不胜感激。

编辑:以下是文件使用的方案的一些示例。

Series Name s01e01.avi

Series Name 1x01.avi

Series Name episode 01.avi

01 Episode Title.avi

最佳答案

文件名不包含'\n'。您可以使用 ^ 来指示字符串的开头:

def getEpisode(filename):
    match = re.search(
        r'''(?ix)                 # Ignore case (i), and use verbose regex (x)
        (?:                       # non-grouping pattern
          e|x|episode|^           # e or x or episode or start of a line
          )                       # end non-grouping pattern 
        \s*                       # 0-or-more whitespaces
        (\d{2})                   # exactly 2 digits
        ''', filename)
    if match:
        return match.group(1)

tests = (
    'Series Name s01e01.avi',
    'Series Name 1x01.avi',
    'Series Name episode 01.avi',
    '01 Episode Title.avi'
    )
for filename in tests:
    print(getEpisode(filename))

产量

01
01
01
01

我删除了 else: return False,因为如果 Python 到达函数末尾但尚未返回任何内容,则返回 None。由于 None 具有 bool 值 False,因此您可以使用 epsiode = getEpisode(filename); 测试是否不匹配。如果情节:....

关于python - 在Python中使用正则表达式从文件名中获取剧集编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9129329/

相关文章:

python - 谷歌应用引擎 : how to parallelize downloads using TaskQueue or Async Urlfetch?

c# - 处理未知数量的捕获组时仅替换一组

python - 使用正则表达式在句子中查找单词

ruby - 如何评估孤立的正则表达式

javascript - 正则表达式,可选(左)括号,但右括号应该是强制性的

python - RabbitMQ python worker 脚本使用 100% CPU

python - Flask 为生产和开发中 URL 不同的资源创建 URL 的方法

python - 从 Azure Devops 将包发布到 PyPi 在 twine 上传时挂起

python - 当我想在单元测试中使用反向函数时,会发生 django urls.exceptions.NoReverseMatch 错误?

regex - htaccess 重定向多语言 Drupal 站点的一个域