正则表达式可选组(音乐标记)

时间:2018-06-24 12:56:52

标签: regex

首先,让我感谢愿意花时间帮助我的任何人!这可能是一个荒谬的简单问题,但我一直在努力解决这个问题……

我正在清理音乐库,并且有大量标记错误的歌曲。尽管文件名确实具有正确的信息,所以我从文件名进行标记。目前,在以下情况下,此方法可以与ID3Tag(文件中的标记)一起使用。

(.*) - (.*) - (.*)

TIEKS-阳光-广播编辑

但是我也有没有第三部分的歌曲:

(.*) - (.*) ?: -(.*)

Jason Derulo-亲吻天空

现在该表达式不再起作用。我尝试通过使用?:参数使最后一部分可选,但这似乎不起作用。

非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

您可以使用

^(.*?) - (.*?)(?: - (.*))?$

请参见regex demo

关键是要使前两个.懒惰与*?量词匹配,并在末尾使用一个可选的非捕获组来包装可选的第三部分。

详细信息

  • ^-字符串的开头
  • (.*?)-第1组:除换行符以外的任何0+个字符,并且尽可能少
  • - -一个空格,-,一个空格
  • (.*?)--第2组:除换行符以外的任何0+个字符,且尽可能少
  • (?: - (.*))?-匹配1或0次出现的可选非捕获组((?:...)?
    • <code> - </code> - a space,-`,空格
    • (.*)--第3组:尽可能多的除换行符以外的0+个字符
  • $-字符串的结尾。