我正试图以(格式化)电视剧集文件名中的节目名称和季节/剧集编号进行匹配,格式为:
Show.One.S01E05.720p.HDTV.x264-CTU.mkv
和
Show.Two.S08E02.HDTV.XviD-LOL.avi
我的正则表达式:
(?P<show>[\w\s.,_-]+)\.[Ss]?(?P<season>[\d]{1,2})[XxEe]?(?P<episode>[\d]{2})
在Show Two上正确匹配,为我提供Show Two
,08
和02
。然而,Show One中的720意味着我会在季节/剧集中找回7
和20
。
如果我在?
之后删除了[XxEe]
,那么它会匹配这两种类型,但我希望该范围对于不包含剧集标识符的文件名是可选的。
我已尝试使用??
来阻止[XxEe]
匹配贪婪,如python docs re模块部分所列,但这没有效果。
如何在忽略字符串的其余部分的同时捕获系列名称部分和季节/剧集部分?
答案 0 :(得分:3)
改变第一场比赛的贪婪:
p=re.compile('(?P<show>[\w\s.,_-]+?)\.[Ss]?(?P<season>[\d]{1,2})[XxEe]?(?P<episode>[\d]{2})')
print p.findall("Game.of.Thrones.S01E05.720p.HDTV.x264-CTU.mkv")
[('Game.of.Thrones', '01', '05')]
print p.findall("Entourage.S08E02.HDTV.XviD-LOL.avi")
[('Entourage', '08', '02')]
请注意第一组中?
之后的+
。
说明:
第一场比赛吃得太多,所以减少贪婪会使得以下比赛更快。 (顺便说一下,这不是一个非常好的例子,我会更改名称,因为他们肯定听起来有点太坦诚了;-))
答案 1 :(得分:1)
尝试:
v
(?P<show>[\w\s.,_-]+?)\.[Ss]?(?P<season>[\d]{1,2})[XxEe]?(?P<episode>[\d]{2})
答案 2 :(得分:0)
在正则表达式的末尾添加一个点:
(?P<show>[\w\s.,_-]+)\.[Ss]?(?P<season>[\d]{1,2})[XxEe]?(?P<episode>[\d]{2})\.
here __^