无法获得正确的正则表达式模式来解析歌曲信息?

时间:2014-02-17 19:57:41

标签: regex

我有以下一行要处理:

  

...播放列表索引:109 id:38522标题:天堂圣诞节艺术家:B.B。 King album:A Christmas Celebration of Hope播放列表索引:110 id:38523标题:我将成为圣诞节艺术家的家:B.B。 King album:A Christmas Celebration of Hope播放列表索引:111 id:38524标题:给我爱的人艺术家:B.B。 King album:A Christmas Celebration of Hope播放列表索引:112 id:38525标题:Christmas Celebration artist:B.B。 King album:A Christmas Celebration of Hope播放列表索引:113 id:38526标题:圣诞快乐,宝贝艺术家:B.B。国王专辑:圣诞节庆祝活动

我到目前为止最好的模式是:

playlist index:(?<index>\d+) id:(?<id>\d+) title:(?<title>[\w\s',]+) artist:(?<artist>[\w\s'.]+) album:(?<album>[\w\s']+)

但是,它只匹配所有其他一个,因为playlistplaylist index)被视为上一个专辑名称的一部分。

2 个答案:

答案 0 :(得分:2)

您可以利用积极的前瞻来限制album部分所需的字符数:

playlist index:(?<index>\d+) id:(?<id>\d+) title:(?<title>[\w\s',]+) artist:(?<artist>[\w\s'.]+) album:(?<album>[\w\s']+)(?= playlist index:|$)
                                                                                                                         ^^^^^^^^^^^^^^^^^^^^^^

regex101 demo

它基本上可以确保在比赛结束时,playlist index:正好在$之后或者{{1}}行结束。

答案 1 :(得分:-1)

最简单的修复

playlist index:(?<index>\d+) id:(?<id>\d+) title:(?<title>[\w\s',]+) artist:(?<artist>[\w\s'.]+) album:(?<album>[\w\s']+?)(?=$|\splaylist)