首先,让我感谢愿意花时间帮助我的任何人!这可能是一个荒谬的简单问题,但我一直在努力解决这个问题……
我正在清理音乐库,并且有大量标记错误的歌曲。尽管文件名确实具有正确的信息,所以我从文件名进行标记。目前,在以下情况下,此方法可以与ID3Tag(文件中的标记)一起使用。
(.*) - (.*) - (.*)
TIEKS-阳光-广播编辑
但是我也有没有第三部分的歌曲:
(.*) - (.*) ?: -(.*)
Jason Derulo-亲吻天空
现在该表达式不再起作用。我尝试通过使用?:参数使最后一部分可选,但这似乎不起作用。
非常感谢您的帮助:)
答案 0 :(得分:0)
您可以使用
^(.*?) - (.*?)(?: - (.*))?$
请参见regex demo
关键是要使前两个.
懒惰与*?
量词匹配,并在末尾使用一个可选的非捕获组来包装可选的第三部分。
详细信息
^
-字符串的开头(.*?)
-第1组:除换行符以外的任何0+个字符,并且尽可能少 -
-一个空格,-
,一个空格(.*?)
--第2组:除换行符以外的任何0+个字符,且尽可能少(?: - (.*))?
-匹配1或0次出现的可选非捕获组((?:...)?
)
<code> - </code> - a space,
-`,空格(.*)
--第3组:尽可能多的除换行符以外的0+个字符$
-字符串的结尾。