我正在尝试从以下字符串中提取艺术家和歌曲标题:
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]
。
答案 0 :(得分:1)
如果你可以在捕获后修剪字符串上的空格,这会变得更加简单。
ViewPart
这将导致
([^-]*)\-([^[]*)
答案 1 :(得分:1)
关键是不仅要使第二个子组变得懒惰,而且还要用$
锚定整个事物:
(.*?)(?:\s*-\s*)(.*?)(?:\s*\[.*\])?$
这给了我以下子组:
Some Guy
Cool Song
方括号中的部分在子组中完全被忽略。