我将sql insert语句解析为值列表,如下所示:
List(6606 'TIMI YURO' 'HURT' 0)
List(6607 'TIMI YURO' 'WHAT*S A MATTER BABY' 0)
List(6608 'TIMI YURO' 'MAKE THE WORLD GO AWAY' 0)
List(6609 'HELMUT ZACHARIAS' 'WHEN THE WHITE LILACS BLOOM AGAIN' 0)
List(6610 'JOHN *THE COOL GHOUL* ZACHERLE' 'DINNER WITH DRAC' 0)
List(6611 'MICHAEL ZAGER BAND' 'LET*S ALL CHANT' 0)
List(6612 'ZAGER AND EVANS' 'IN THE YEAR 2525 (EXORDIUM AND TERMINUS)' 1)
List(6613 'RICKY ZAHND / BLUEJEANERS' 'NUTTIN* FOR CHRISTMAS' 0)
List(6614 'WARREN ZEVON' 'WEREWOLVES OF LONDON' 0)
List(6615 'ZOMBIES' 'SHE*S NOT THERE' 0)
现在,对于每个列表,我想将整数和字符串分成4的元组。我不擅长正则表达式。如果我执行split(" ")
,那么在某些情况下,我有一个带有空格的复杂字符串,例如WHEN THE WHITE LILACS BLOOM AGAIN
,我希望将其保存为单个字符串元组值,它不起作用。我试过了.map( recordID => ( recordID(0), recordID(1), recordID(2), recordID(3) ) )
,但我会超出约束范围。如果有人能提供帮助,我将不胜感激。
更新: 以下是原始的sql语句。这很长,但我只是发布一个样本。我想从文件中读取每个值到4的元组(int,string,string,int):
insert into songlist (id, artist, title, numone) values (6606, 'TIMI YURO', 'HURT', 0);
insert into songlist (id, artist, title, numone) values (6607, 'TIMI YURO', 'WHAT*S A MATTER BABY', 0);
insert into songlist (id, artist, title, numone) values (6608, 'TIMI YURO', 'MAKE THE WORLD GO AWAY', 0);
insert into songlist (id, artist, title, numone) values (6609, 'HELMUT ZACHARIAS', 'WHEN THE WHITE LILACS BLOOM AGAIN', 0);
insert into songlist (id, artist, title, numone) values (6610, 'JOHN *THE COOL GHOUL* ZACHERLE', 'DINNER WITH DRAC', 0);
insert into songlist (id, artist, title, numone) values (6611, 'MICHAEL ZAGER BAND', 'LET*S ALL CHANT', 0);
insert into songlist (id, artist, title, numone) values (6612, 'ZAGER AND EVANS', 'IN THE YEAR 2525 (EXORDIUM AND TERMINUS)', 1);
insert into songlist (id, artist, title, numone) values (6613, 'RICKY ZAHND / BLUEJEANERS', 'NUTTIN* FOR CHRISTMAS', 0);
insert into songlist (id, artist, title, numone) values (6614, 'WARREN ZEVON', 'WEREWOLVES OF LONDON', 0);
insert into songlist (id, artist, title, numone) values (6615, 'ZOMBIES', 'SHE*S NOT THERE', 0);
答案 0 :(得分:1)
您可以遍历输入行并执行类似这样的操作
val line = "insert into songlist (id, artist, title, numone) values (6606, 'TIMI YURO', 'HURT', 0);"
val parseInsertRegex = raw".*values \((\d+), '(.*)', '(.*)', (\d+)\);".r
line match {
case parseInsertRegex(id, artist, title, numone) => (id.toInt, artist, title, numone == "1")
}
这会让我回头
res0: (Int, String, String, Boolean) = (6606,TIMI YURO,HURT,false)