使用正则表达式解析m3u文件

时间:2011-07-15 14:31:42

标签: regex

我希望使用正则表达式解析m3u文件。 m3u看起来像:

#EXTM3U
#EXTINF:36,Artist - Title
C:\Users\Public\Music\Sample Music\file1.mp3
#EXTINF:19,Artist - Title
C:\Users\Public\Music\Sample Music\file2.mp3
#EXTINF:19,Artist - Title (Additional Title)
C:\Users\Public\Music\Sample Music\file3.mp3
#EXTINF:57,Artist - Title - Additional Title
C:\Users\Public\Music\Sample Music\file4.mp3

当我在文本编辑器中打开文件时,m3u全部在一行中,没有换行符。我期待创建两个正则表达式。第一个将解析艺术家和标题信息。正则表达式输出应为:

Artist - Title
Artist - Title
Artist - Title (Additional Title)
Artist - Title - Additional Title

第二个正则表达式应解析相同的信息,但在不同的组中捕获艺术家和标题。正则表达式输出应为:

第1组

Artist
Artist
Artist
Artist

第2组

Title
Title
Title (Additional Title)
Title - Additional Title

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

以下是对第一个问题的快速思考:

#EXTINF:[0-9]+,([a-zA-Z0-9 ]+ - [a-zA-Z0-9 ]+(?: (?:- [a-zA-Z0-9 ]+|\([a-zA-Z0-9 ]+\))))?

这假设艺术家名称和歌曲标题仅由字母,数字和空格组成(即[a-zA-Z0-9]),因此请调整以反映您拥有的歌曲类型和内容想到。

此外,我已经将python表示法用于非捕获组 - (?:) - 您可能需要根据您将使用它来替换它。

从那里,您可以轻松地将上述内容拆分为两个捕获组:

#EXTINF:[0-9]+,([a-zA-Z0-9 ]+) - ([a-zA-Z0-9 ]+(?: (?:- [a-zA-Z0-9 ]+|\([a-zA-Z0-9 ]+\))))?