正则表达式与有一定格式的文本

最近用aMule扒下来一堆cd。这些cd很神奇,是一堆iso,里面是一些flac文件……

这些flac都没有歌曲信息,于是我想办法提取歌曲信息存进去……

首先是文件名。文件名还算有点规律,都是###-(#) xxx _ xxx _ xxx _ xxx这样的。但是搞了没几张就发现,这个不太靠谱。首先是,有时候分隔用的是_,有时候是__…… 其次有时候一个域内部也会有_,例如标题里面时常出现…… 再次,看上去不少文件名最后被截断了…… 于是为了搞出靠谱的歌曲信息,还是用别的办法。

其次,每个cd还有个Vol ## xxx.txt的文件。打开一看,好歹比文件名有规律一点,第一行是专辑信息,之后有些# xxx : xxx / xxx = xxx这样的行,最后还有一些#-# xxx的表示录音时间的行。于是搞了个简单的python脚本,parse这些信息存进去……

既然是parse文本,那就正则表达式。一开始可简单了。再配合glob找文件,mutagen保存歌曲信息,看上去都很美好……

直到处理没几张专辑之后我发现:格式貌似不止一种…… 接下来就是各种麻烦的事情……

有时候,因为是一个作品的各个部分,除了第一部分那行外艺术家之类信息统统没有,只有一个小标题……

有时候,艺术家信息在下面录音时间那行的末尾……

有时候,录音时间那些行不是#-#或者#,而是#、#-#、#-#这样……

有时候,xxx : xxx表示作曲:标题,但有时候,xxx : xxx表示大标题:小标题…… 还有时候,xxx : xxx就完全是个小标题……

有时候,大标题和小标题之间用—分隔,但有时候,用:分隔……

有时候,:变成了;……

有时候,/不见了……

反正一开始一个没几行的python脚本膨胀到了超过两百行,有时候还需要手动处理…… 例如有一张里面艺术家跑到了第一行专辑信息里……

最后好歹算是差不多弄完了。虽说这还是有点格式的文本(我觉得肯定是人写的),正则表达式处理还是很麻烦。如果处理系统有音乐相关信息的话,估计能够更好地完成任务(例如知道作曲家都有那些这样)……