2017-04-17 32 views
2

我有一個包含多串線分割多行字符串:斯卡拉由包含所有連字符

this is line 1 

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

this is line 2 

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

this is line 3 

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

this is line 4 

我想分這串入通過拆分塊上線僅包含( - ,+) ,我嘗試了正則表達式(^ ++ $)|(^ - + $),它在正則表達式驗證器上工作正常,但它在Scala中不起作用。

+0

使用'「」 「(^ \ $ ++)|(^ - + $)(M?)」 「」'。 –

+0

謝謝Wiktor,我試過了,它效果很好。 – sam

回答

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