Scala按行包含所有连字符

时间:2017-04-17 15:49:27

标签: regex scala split

我有一个多行字符串,其中包含:

this is line 1

------------------------------

this is line 2

+++++++++++++++++++++++++

this is line 3 

---------------

this is line 4

我想通过拆分仅包含( - ,+)的行来将此字符串分成块,我尝试使用正则表达式(^ ++ $)|(^ - + $)在正则表达式验证器上工作正常,但它是不在Scala工作。

1 个答案:

答案 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)

请参阅another Scala demo