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 }