簡體   English   中英

當一行與Scala中的子字符串匹配時,分割多行字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM