通配符后的可选匹配模式
Optional match pattern after wildcard
我正在尝试使用正则表达式进行模式匹配,似乎我无法捕获后面有可选部分的特定部分,所有部分都遵循通配符捕获。我不确定如何解决它。
这里有两个可能匹配的正则表达式的不同示例
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*\))$
由于添加了第二个 Season#
和 Episode#
.
,因此匹配 MasterChef Junior example, but not the Parks and Recreation example
我尝试添加一个可选匹配项来捕获第二个 SeasonxEpisode
但似乎开始时的外卡捕获了所有内容并且模式忽略了可选部分(因为它不需要使用它匹配)。
example with optional (?:\s*&\s*\d*x\d*)?
如何解决这个正则表达式问题?有没有一种方法可以在开始时以非 greedy 的方式捕获外卡?
^(.*?) (\d*)x(\d*)\s*(.*?) (\(\d*\))$
尝试 this.See 演示。
https://regex101.com/r/tX2bH4/59
只需将您的第一个 (.*)
更改为 (.*?)
使其不贪婪,让它捕获您想要的内容。
正如我在评论中所说,您需要将第一个 .*
更改为 .*?
。因为 .*
是贪心的,它尽可能匹配所有的字符。将其更改为 .*?
,将进行非贪婪匹配。
^(.*?) (\d*)x(\d*)(?:\s*&\s*\d*x\d*)?\s*(.*) (\(\d*\))$
我正在尝试使用正则表达式进行模式匹配,似乎我无法捕获后面有可选部分的特定部分,所有部分都遵循通配符捕获。我不确定如何解决它。
这里有两个可能匹配的正则表达式的不同示例
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*\))$
由于添加了第二个 Season#
和 Episode#
.
我尝试添加一个可选匹配项来捕获第二个 SeasonxEpisode
但似乎开始时的外卡捕获了所有内容并且模式忽略了可选部分(因为它不需要使用它匹配)。
example with optional (?:\s*&\s*\d*x\d*)?
如何解决这个正则表达式问题?有没有一种方法可以在开始时以非 greedy 的方式捕获外卡?
^(.*?) (\d*)x(\d*)\s*(.*?) (\(\d*\))$
尝试 this.See 演示。
https://regex101.com/r/tX2bH4/59
只需将您的第一个 (.*)
更改为 (.*?)
使其不贪婪,让它捕获您想要的内容。
正如我在评论中所说,您需要将第一个 .*
更改为 .*?
。因为 .*
是贪心的,它尽可能匹配所有的字符。将其更改为 .*?
,将进行非贪婪匹配。
^(.*?) (\d*)x(\d*)(?:\s*&\s*\d*x\d*)?\s*(.*) (\(\d*\))$