Scala正则表达式由多个空格和新行分割

时间:2017-10-21 04:28:37

标签: regex scala split io

我为此浏览了不同的正则表达式文档,但我仍然没有得到它。我希望有人能够帮助我。

我有一张这样的表:

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+/等。无效。我非常感谢任何帮助。我的目标是将文件读入只包含字符串和int值的2D数组。

1 个答案:

答案 0 :(得分:1)

你的问题不是正则表达式本身,而是你"合并"使用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)