当一行与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
进行检查答案 0 :(得分:1)
您可以使用
val key = "GO"
val res = s1.stripMargin('|').split(s"(?mi)^\\s*${key}\\s*$$[\r\n]*")
请参阅Scala demo
在使用stripMargin('|')
首先删除缩进后应用正则表达式拆分。
模式匹配:
(?mi)
- 整个模式不区分大小写,因为i
是不区分大小写的修饰符,m
使^
和$
匹配开始/结束行而不是字符串^
- 行的开头\\s*
- 0个或更多空格${key}
- key
的值(请注意该变量中的might need Pattern.quote
to escape any special chars)\\s*
- 尾随行空白$$
- 它实际上是单个文字$
- 一行的结尾(由于字符串文字是插值的,其中$
用于引入代码,因此它加倍) [\r\n]*
- 零个或多个CR或/和LF换行符。答案 1 :(得分:0)
s1.split( "(?m)^(\\s*(?i)%s)\\s*$[\r\n]*".format("GO"))
最后的答案。