Ich versuche, Teile einer mehrzeiligen Zeichenfolge mit einem Regex in Scala zu erfassen. Der Eingang ist von der Form:Scala Regex Mehrere Block Capturing
val input = """some text
|begin {
| content to extract
| content to extract
|}
|some text
|begin {
| other content to extract
|}
|some text""".stripMargin
ich mehrere Möglichkeiten ausprobiert habe, die mir den Text aus den begin {
}
Blöcke bekommen sollte. Einer von ihnen:
val Block = """(?s).*begin \{(.*)\}""".r
input match {
case Block(content) => println(content)
case _ => println("NO MATCH")
}
Ich bekomme eine NO MATCH
. Wenn ich die \}
fallen lasse, sieht die Regex wie (?s).*begin \{(.*)
aus und es entspricht dem letzten Block einschließlich der unerwünschten }
und "etwas Text". Ich habe meine Regex bei rugular.com wie mit /.*begin \{(.*)\}/m
überprüft und es entspricht mindestens einem Block. Ich dachte, wenn meine Scala-Regex dasselbe würde, könnte ich anfangen, findAllIn
zu verwenden, um alle Blöcke zu vergleichen. Was mache ich falsch?
Ich hatte einen Blick auf Scala Regex enable Multiline option, aber ich konnte nicht alle Vorkommen der Textblöcke in zum Beispiel eine Seq[String]
erfassen. Jede Hilfe wird geschätzt.
Wissen Sie, ob das irgendwo dokumentiert ist? –
Danke Daniel für deine ausführliche Antwort. Klappt wunderbar. –
Alex, an diesem Punkt bin ich mir nicht sicher. Ich habe so viel mit Regex gemacht und sogar die Bibliothek erweitert, dass ich mich nicht mal daran erinnern kann, was die Bibliothek bietet oder nicht! Zum Beispiel würde ich 'Block findAllMatchesIn input map (_ group 0)' schreiben, als ich entdeckte, dass diese Methode in der Bibliothek nicht existiert wie sie ist. –