20

これを使いたい

val r = """^myprefix:(.*)""".r
val r(suffix) = line
println(suffix)

ただし、文字列が一致しない場合はエラーになります。マッチングがオプションの同様の構造を使用するにはどうすればよいですか?

編集:明確にするために、グループが必要です(.*)

4

3 に答える 3

39

パターン マッチングによって一致グループを抽出できます。

val r = """^myprefix:(.*)""".r
line match {
  case r(group) => group
  case _ => ""
}

を使用する別の方法Option

Option(line) collect { case r(group) => group }
于 2012-08-04T18:05:58.110 に答える
27
"""^myprefix:(.*)""".r        // Regex
  .findFirstMatchIn(line)     // Option[Match]
  .map(_ group 1)             // Option[String]

これには、正規表現を中間値に割り当てる必要なく、ワンライナーとして記述できるという利点がありますr

ご参考までに、グループ 0 は一致した文字列であり、グループ 1 などはキャプチャ グループです。

于 2012-08-05T01:51:33.693 に答える
2

試す

r.findFirstIn(line)

更新:

scala> val rgx = """^myprefix:(.*)""".r
rgx: scala.util.matching.Regex = ^myprefix:(.*)

scala> val line = "myprefix:value"
line: java.lang.String = myprefix:value

scala> for (rgx(group) <- rgx.findFirstIn(line)) yield group
res0: Option[String] = Some(value)
于 2012-08-04T17:48:45.357 に答える