【发布时间】:2015-01-21 06:34:04
【问题描述】:
我正在尝试使用正则表达式进行模式匹配,但似乎我无法捕获某个部分,它后面有一个可选部分,所有这些都遵循通配符捕获。不知道怎么解决。
这里有两个可能匹配的正则表达式的不同示例
MasterChef Junior 3x03 Grandad Gordon! (2015)
Parks and Recreation 7x03 & 7x04 William Henry Harrison (2015)
我需要捕获标题 (MasterChef Junior)、季节 (3)、剧集 (03) 和剧集标题 (Grandad Gordon!)。
我创建了正则表达式模式^(.*) (\d*)x(\d*)\s*(.*) (\(\d*\))$
它匹配MasterChef Junior example,但不匹配Parks and Recreation example,因为添加了第二个Season# 和Episode#。
我尝试添加一个可选匹配来捕获第二个SeasonxEpisode,但似乎一开始的通配符正在捕获所有内容,并且该模式忽略了可选部分(因为它不需要使用它来匹配)。
example with optional(?:\s*&\s*\d*x\d*)?
我该如何解决这个正则表达式问题?有没有办法以非greedy 的方式在开始时捕获通配符?
【问题讨论】:
-
你的意思是regex101.com/r/uU8sS1/4?将第一个
.*设为非贪婪。
标签: regex pattern-matching regex-greedy