RegEx可选部分

时间:2015-12-15 12:41:25

标签: regex

我正在尝试从以下字符串中提取艺术家和歌曲标题:

Some Guy - Cool Song
Some Guy - Cool Song [FooBar Release]

我想得到这些群体:

Some Guy
Cool Song

我不关心[FooBar Release]部分。

我想出了以下RegEx:

(.*?)(?:\s*-\s*)(.*)(?:\s*\[.*\])?

这适用于第一个字符串,但是第二个字符串组2占用了-之后的所有内容,因此我得到了Cool Song [FooBar Release]

regex101 example

2 个答案:

答案 0 :(得分:1)

如果你可以在捕获后修剪字符串上的空格,这会变得更加简单。

ViewPart

这将导致

([^-]*)\-([^[]*)

答案 1 :(得分:1)

关键是不仅要使第二个子组变得懒惰,而且还要用$锚定整个事物:

(.*?)(?:\s*-\s*)(.*?)(?:\s*\[.*\])?$

这给了我以下子组:

Some Guy
Cool Song

方括号中的部分在子组中完全被忽略。

regex101