0

Scalaで正規表現抽出/マッチングを短絡するこの冗長コードがあります。これは、文字列を最初の Regex と一致させようとします。一致しない場合は、文字列を 2 番目の Regex と一致させようとします。

val regex1 : scala.util.matching.Regex = "^a(b)".r
val regex2 : scala.util.matching.Regex = "^c(d)".r

val s = ? 
val extractedGroup1 : Option[String] = s match { case regex1(v) => Some(v) case _ => None }
val extractedGroup2 : Option[String] = s match { case regex2(v) => Some(v) case _ => None}

val extractedValue = extractedGroup1.orElse(extractedGroup2)

結果は次のとおりです。

s == "ab" 次に、extractedValue == "b"

s == "cd" 次に、extractedValue == "c"

s == "gg" の場合は、extractedValue == なし。

私の質問は、正規表現または演算子を使用して 2 つの正規表現を単一の正規表現に結合し、引き続き Scala エクストラクタを使用するにはどうすればよいかということです。これを試しましたが、常に None の場合です。

val regex : scala.util.matching.Regex = "^a(b)$ | ^c(d)$".r
val extractedValue: s match { case regex(v) => Some(v) case _ => None }
4

1 に答える 1