Tôi đang cố gắng nắm bắt các phần của một chuỗi nhiều hàng với một regex trong Scala. Các đầu vào có dạng:Scala Regex Nhiều khối Chụp
val input = """some text
|begin {
| content to extract
| content to extract
|}
|some text
|begin {
| other content to extract
|}
|some text""".stripMargin
Tôi đã thử một vài khả năng mà nên làm cho tôi văn bản ra khỏi begin {
}
khối. Một trong số họ:
val Block = """(?s).*begin \{(.*)\}""".r
input match {
case Block(content) => println(content)
case _ => println("NO MATCH")
}
Tôi nhận được NO MATCH
. Nếu tôi thả \}
regex trông giống như (?s).*begin \{(.*)
và nó khớp với khối cuối cùng bao gồm }
và "một số văn bản" không mong muốn. Tôi đã kiểm tra regex của mình tại rubular.com như với /.*begin \{(.*)\}/m
và nó khớp với ít nhất một khối. Tôi nghĩ rằng khi Scala regex của tôi sẽ phù hợp với cùng tôi có thể bắt đầu sử dụng findAllIn
để phù hợp với tất cả các khối. Tôi đang làm gì sai?
Tôi đã xem Scala Regex enable Multiline option nhưng tôi không thể quản lý để nắm bắt tất cả các lần xuất hiện của các khối văn bản, ví dụ: Seq[String]
. Bất kỳ trợ giúp nào được đánh giá cao.
Bạn có biết liệu tài liệu này có được ghi ở bất kỳ đâu không? –
Cảm ơn Daniel cho câu trả lời chi tiết của bạn. Làm việc như một say mê. –
Alex, tại thời điểm này, tôi không chắc chắn. Tôi đã làm rất nhiều với Regex, thậm chí mở rộng thư viện, rằng tôi thậm chí không thể nhớ những gì thư viện cung cấp hay không! Ví dụ, tôi sẽ viết 'Block findAllMatchesIn map (_ group 0)', khi tôi phát hiện ra phương thức này không tồn tại trong thư viện. –