Может быть, вы ищете регулярное выражение с именованными группами?
//Regex with named groups
val pattern = """^Hello (?<firstname>\w+) (?<lastname>\w+)$""".r
val groups = List(
"firstname",
"lastname"
)
def matchAll(str: String): Option[Map[String, String]] = pattern
.findFirstMatchIn(str)
.map { matched =>
groups.map(name => name -> matched.group(name)).toMap
}
matchAll("Hello Joe Doe") //Some(Map(firstname -> Joe, lastname -> Doe))