斯卡拉正则表达式被多个空格和新行分割
问题描述:
我经历了不同的正则表达式文件,但我仍然没有得到它。我希望有人能够帮助我。斯卡拉正则表达式被多个空格和新行分割
我有一个表是这样的:
program 1 0 1 1 0 0 0 0 0 0 0 1
stmt_list 2 0 2 2 0 0 0 0 0 0 0 3
stmt 4 0 5 6 0 0 0 0 0 0 0 0
我想在一个数组从文件和存储读取它。我做了以下内容:
val source = io.Source.fromFile("file.txt").getLines.toList.mkString.split("\\W+")
而且我越来越像输出:
program
1
0
1
1
0
0
0
0
0
0
0
1stmt_list // this is problem, int and string together which I don't want.
2
0
2
2
0
0
0
0
0
0
0
3stmt
4
0
.
.
.
我学到\s
匹配任何空格,制表符或换行符。但是当我尝试时,我在scala error: invalid escape character
上出错。我尝试了其他一些步骤:" +"
,/\W+/
等没有工作。我非常感谢任何帮助。我的目标是将文件读取到只有字符串和整数值的二维数组中。
答
你的问题是没有这么多的正则表达式本身,但事实上,你“合并”的所有行成一个字符串(使用mkString
),而不是在每行单独操作,使用map
:
val source = Source.fromFile("file.txt")
.getLines.toList // gets a list of file lines
.map(_.split("\\W+").toList) // maps each line into a list
source.foreach(println)
// List(program, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1)
// List(stmt_list, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3)
// List(stmt, 4, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0)
我猜你不需要中间的.toList :) –
虽然这取决于你想要对结果做什么 - 没有'toList','source'的类型为'Iterator [List [String]]'特别是不会改变'source.foreach(..)'的结果,但是如果你知道你需要一个'List [List [String]]',那么它是必需的。 –