我有一个多行字符串,其中包含:
this is line 1
------------------------------
this is line 2
+++++++++++++++++++++++++
this is line 3
---------------
this is line 4
我想通过拆分仅包含( - ,+)的行来将此字符串分成块,我尝试使用正则表达式(^ ++ $)|(^ - + $)在正则表达式验证器上工作正常,但它是不在Scala工作。
答案 0 :(得分:2)
您需要使用多线修改器使^
与行的开头匹配,并$
匹配行的结尾。此外,用\s*
(零个或多个空格)封闭模式将修剪结果列表中的项目:
val rx = """(?m)\s*^(\++|-+)$\s*"""
val res = text.split(rx)
print(res.toList)
// => List(this is line 1, this is line 2, this is line 3, this is line 4)
请参阅Scala demo
注意我也使用像^(\++|-+)$
这样的单个分组构造缩短了模式。它匹配一行的开头,然后是1 +加号或连字符号,然后是一行的结尾(因此,不需要重复^
和$
)。
另一个解决方案是使用换行符拆分字符串,然后过滤掉空行,或仅包含加号或连字符的行:
print(text.split("\\r?\\n").filter(line=>line.matches("""(\++|-+)?""") == false).toList)
// => List(this is line 1, this is line 2, this is line 3 , this is line 4)