Estoy tratando de capturar partes de una cadena con múltiples líneas con una expresión regular en Scala. La entrada es de la forma:Scala Regex Captura de múltiples bloques
val input = """some text
|begin {
| content to extract
| content to extract
|}
|some text
|begin {
| other content to extract
|}
|some text""".stripMargin
He intentado varias posibilidades que me deben recibir el texto de los bloques begin {
}
. Uno de ellos:
val Block = """(?s).*begin \{(.*)\}""".r
input match {
case Block(content) => println(content)
case _ => println("NO MATCH")
}
obtengo un NO MATCH
. Si dejo caer el \}
, la expresión regular se ve como (?s).*begin \{(.*)
y coincide con el último bloque, incluido el }
no deseado y "algún texto". Comprobé mi expresión regular en rubular.com como con /.*begin \{(.*)\}/m
y coincide con al menos un bloque. Pensé que cuando mi Scala Regex coincidiría lo mismo podría comenzar a usar findAllIn
para que coincida con todos los bloques. ¿Qué estoy haciendo mal?
He echado un vistazo a Scala Regex enable Multiline option pero no he podido capturar todas las apariciones de los bloques de texto en, por ejemplo, un Seq[String]
. Se agradece cualquier ayuda.
¿Sabe si esto está documentado en alguna parte? –
Gracias a Daniel por su respuesta detallada. Funciona de maravilla. –
Alex, en este punto, no estoy seguro. ¡Hice tanto con Regex, incluso extendiendo la biblioteca, que ni siquiera puedo recordar qué proporciona o no la biblioteca! Por ejemplo, iba a escribir 'Bloquear el mapa de entrada findAllMatchesIn (_ grupo 0)', cuando descubrí que este método no existe en la biblioteca tal como está. –