У меня есть этот подробный код, который выполняет извлечение/совпадение коротких замыканий в Scala. Это пытается сопоставить строку с первым Regex, если она не соответствует, она пытается сопоставить строку со вторым Regex.Scala Regex Extractor с оператором OR
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)
Вот результаты:
сек == "аб", то extractedValue == "б"
сек == "CD", а затем extractedValue == "с"
s == "gg" then extractValue == None.
Мой вопрос в том, как мы можем объединить два регулярных выражения в одно регулярное выражение с регулярным выражением или оператором и использовать экстракторы Scala. Я попробовал это, но это всегда дело Ничего.
val regex : scala.util.matching.Regex = "^a(b)$ | ^c(d)$".r
val extractedValue: s match { case regex(v) => Some(v) case _ => None }
Также стоит отметить, что анкеры являются посторонними, так как выпрямитель соответствия шаблону regex.match весь вход. В этом простом случае '{case r1 (v) => Некоторое (v) случай r2 (v) => Some (v)}' более очевидно. Кроме того, используйте '(? X)' для игнорирования встроенных пробелов. –
Вы можете использовать оригинальную формулировку, используя 'unapplySeq' или:' r1.findFirstMatchIn (s) илиElse r2.findFirstMatchIn (s) map (_ group 1) '. –