如何防止python正则表达式过于贪婪

2024-04-28 04:47:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试(在Python中)匹配来自电视集文件名的节目名和季节/集编号,格式如下:

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})

正确匹配显示2给我Show Two08和{}。然而,在第一季中的720意味着我要回到7和{}季/集。在

如果我删除[XxEe]之后的?,那么它将匹配这两种类型,但我希望对于不包括事件标识符的文件名,该范围是可选的。在

我尝试过使用??来阻止[XxEe]匹配的贪婪,如python docsre模块部分所列,但这没有效果。在

如何在忽略字符串其余部分的同时捕获序列名部分和季节/集部分?在


Tags: 文件名格式showone节目编号电视mkv
3条回答

在正则表达式末尾添加一个点:

(?P<show>[\w\s.,_-]+)\.[Ss]?(?P<season>[\d]{1,2})[XxEe]?(?P<episode>[\d]{2})\.
                                                                      here __^

在第一场比赛中改变贪婪:

 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')]

注意第一组中?后面的+。在

说明:

第一场比赛吃得太多,所以减少它的贪欲会使下一场比赛更快。(顺便说一句,这不是一个很好的例子,我会改名字,因为它们听起来确实有点太过于温和了,说实话;—)

尝试:

                    v
(?P<show>[\w\s.,_-]+?)\.[Ss]?(?P<season>[\d]{1,2})[XxEe]?(?P<episode>[\d]{2})

相关问题 更多 >