我想在Scala中使用正则表达式捕获多行字符串的部分。 输入的格式为:
val input = """some text
|begin {
| content to extract
| content to extract
|}
|some text
|begin {
| other content to extract
|}
|some text""".stripMargin
我尝试了几种方法来获取位于 begin {
}
块中的文本。其中之一:
val Block = """(?s).*begin \{(.*)\}""".r
input match {
case Block(content) => println(content)
case _ => println("NO MATCH")
}
我得到了一个“NO MATCH”。如果我去掉“\}”,那么正则表达式看起来像“(?s)。*begin \{(.*)”,它将匹配包括不需要的“}”和“some text”的最后一个块。我在rubular.com上检查了我的正则表达式,如
/.*begin \{(.*)\}/m
,它至少匹配一个块。我以为当我的Scala正则表达式匹配相同的内容时,我就可以开始使用findAllIn来匹配所有块。我做错了什么?我看了一下Scala Regex enable Multiline option,但我无法捕获例如
Seq[String]
中的所有文本块的出现。
任何帮助都将不胜感激。
Block findAllMatchesIn input map (_ group 0)
。 - Daniel C. Sobral