通配符后的可选匹配模式
问题描述:
我正在尝试使用正则表达式执行模式匹配,并且似乎无法捕获某个部分,并且后面跟随一个可选部分,所有部分都在通配符捕获之后。我不知道如何解决它。通配符后的可选匹配模式
这里有匹配
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的方式在开始时捕捉通配符?
答
^(.*?) (\d*)x(\d*)\s*(.*?) (\(\d*\))$
试试看。
https://regex101.com/r/tX2bH4/59
只要改变你的第一个(.*)
到(.*?)
使其不贪婪让它捕捉到你想要的东西。
你的意思是这个https://www.regex101.com/r/uU8sS1/4?使第一个'。*'非贪婪。 – 2015-01-21 06:36:23