[英]Split a multi-line string when a line matches a substring in Scala
當一行與Scala中的子字符串匹配時,分割多行字符串。 以下是相同的代碼段。 但是我想使用適當的正則表達式。
val s1 =
"""
|Hello;
|------------------------------
|GO
|World
|go
|True
| GO
|,I am Naga
|+++++++++++++++++++++++++
|GOTO School
|GO Heaven
"""
s1.split("\n(?i)GO\n")
輸出:
Hello;
------------------------------
World
True
,I am Naga
+++++++++++++++++++++++++
GOTO School
GO Heaven
想要在正則表達式而不是\\ n中使用^和$進行檢查
您可以使用
val key = "GO"
val res = s1.stripMargin('|').split(s"(?mi)^\\s*${key}\\s*$$[\r\n]*")
觀看Scala演示
在使用stripMargin('|')
首先刪除縮進之后,將應用正則表達式拆分。
模式匹配 :
(?mi)
-整個圖案是不區分大小寫如i
是不區分大小寫的改性劑和m
使得^
和$
的線的匹配的開始/結束而不是字符串 ^
-行首 \\\\s*
-0或多個空格 ${key}
-值key
(注意,您可能需要Pattern.quote
轉義任何特殊字符在該變量) \\\\s*
-尾隨空格 $$
-實際上是單個文字$
-行的結尾(它是字符串文字是插值的兩倍,其中$
用於引入代碼) [\\r\\n]*
-零個或多個CR或/和LF換行符。 s1.split( "(?m)^(\\s*(?i)%s)\\s*$[\r\n]*".format("GO"))
高於最終答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.