2017-10-21 6 views
1

私はこれに対して別の正規表現文書を調べましたが、まだそれは得られません。私は誰かが私を助けることができることを願っています。複数のスペースと改行で分割されたScalaの正規表現

私はこのようなテーブルを持っている:

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マッチ任意の空白、タブ、改行文字を学んだ私は、次のようでした。しかし、私が試したときに、スカラーでエラーが発生しました error: invalid escape character。私は他のステップの束を試みた: " +"/\W+/等は働いていません。私は非常に助けていただければ幸いです。私の目標は、文字列とint値だけを持つ2D配列にファイルを読み込むことです。

答えて

1

あなたの問題はあまり正規表現そのものではありませんが、mapを使用して、代わりに個別に各ライン上で動作する(mkStringを使用して)1つの文字列にすべての行を「マージ」という事実:

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) 
+1

私はあなたが中間の.toListは必要ないと思う:) –

+0

それはあなたがその結果で何をしたいかに依存するが、 'toList'、' source'型は 'Iterator [List [String]]'ほとんどの目的には良いですが、特に 'source.foreach(..)'の結果は変更されませんが、List [List [String]]が必要であることがわかっている場合は必要です。 –