私はmatch ... case
開梱文でpattern.findFirstMatchIn()
で試合を行いますがないScalaの正規表現を持っている:Scalaの正規表現:のfindAllと試合の間に矛盾...場合
val pattern = "\"(\\d+?)\",\"(.*?)\",(.+)$".r
val line = "\"1795\",\"title\",\"desc"
println(pattern.findFirstMatchIn(line).isDefined)
val pattern2Unpacking = line match {
case pattern(category_id, title, description) =>
true
case _ => false
}
println(pattern2Unpacking)
一致する行が"1795","title","desc
との欠如であります末尾の引用符は意図的です。
出力はtrue
ではなく、true
とfalse
です。
私はthis answerとthisを見ましたが、解決策を私の問題に関連付けることはできません。境界マッチャーを省略しても何も変わりません。
ここで何が問題になりますか?コメント
スポイラー以下
更新:を以下に報告された見かけのすごみの一部は、私のデータは、中に注意するものであるIDEで表示されていない文字が含まれているという事実によって説明されますこれらの状況。実際に何が起こっているかについての詳細な詳細については、受け入れられた回答を参照してください。
私のIntelliJのスクリーンショットです。上のコードは@WiktorStribiżewのリンクからのコピー貼りです。下のコードは私がこの投稿に基づいたものです。出力ウィンドウがスクリーンショットに含まれています。これはいたずらではなく、これは少し怖いです。
アップデート2
これはさらに良いです:http://ideone.com/KsIIc1
はありません、私どちらも偽のスクリーンショットも私がいたずらをするideone.comをハックでした。
私はこのようなを見つけます'val line = "" "" 356 "、" 789 "、" title "、" bla "" "は、引用符をエスケープする必要があるため、' false'になります。 –
くそー、エスケープされた引用符で動作します。問題は:引用符付きの行は、完全なコードを投稿するための私のおもちゃの例にすぎません。私の実際の問題は、CSVとより複雑な正規表現から来ている行であり、私は読みやすさのためにそれを捨てました。 – DCS
それでも、元の行は 'pattern.findFirstMatchIn'で' true'を返しますか? – DCS