これを使いたい
val r = """^myprefix:(.*)""".r
val r(suffix) = line
println(suffix)
ただし、文字列が一致しない場合はエラーになります。マッチングがオプションの同様の構造を使用するにはどうすればよいですか?
編集:明確にするために、グループが必要です(.*)
パターン マッチングによって一致グループを抽出できます。
val r = """^myprefix:(.*)""".r
line match {
case r(group) => group
case _ => ""
}
を使用する別の方法Option
:
Option(line) collect { case r(group) => group }
"""^myprefix:(.*)""".r // Regex
.findFirstMatchIn(line) // Option[Match]
.map(_ group 1) // Option[String]
これには、正規表現を中間値に割り当てる必要なく、ワンライナーとして記述できるという利点がありますr
。
ご参考までに、グループ 0 は一致した文字列であり、グループ 1 などはキャプチャ グループです。
試す
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)