包括scala regex.split()中的拆分模式/标记

包括scala regex.split()中的拆分模式/标记,regex,scala,Regex,Scala,scala.util.matching.Regex似乎只有一个split()方法,其行为是提取匹配项并仅返回输入字符串的非匹配段: val str = "Here is some stuff PAT and second token PAT and third token PAT and fourth" val r = "PAT".r r.split(str) res14: Array[String] = Array("Here is some stuff ", " and second to

scala.util.matching.Regex
似乎只有一个
split()
方法,其行为是提取匹配项并仅返回输入字符串的非匹配段:

val str = "Here is some stuff PAT and second token PAT and third token PAT and fourth"
val r = "PAT".r
r.split(str)

res14: Array[String] = Array("Here is some stuff ", " and second token ", "
and third token ", " and fourth")
那么,是否有另一种常用的方法来保留返回列表中的令牌

注意:我在实际工作中使用的拆分模式有些复杂,当然不像上面的例子那样是常量。因此,仅仅插入交替常量值(或压缩它们)是不够的

更新这里是一个更具代表性的正则表达式

val str = "Here is some stuff PAT and second token PAT and third token 
           or something else and fourth"
val r = "(PAT|something else)".r
r.split(str)

res14: Array[String] = Array("Here is some stuff ", " and second token ", "
and third token ", " and fourth")

对于不涉及无限宽度的图案的非复杂图案,可以使用前向/后向解决方案:

val str = "Here is some stuff PAT and second token PAT and third token PAT and fourth"
val r = "((?<=PAT)|(?=PAT))".r
print(r.split(str).toList)
val str=“这里有一些东西,包括拍打和第二拍打,第三拍打和第四拍打”

val r=“(?模式有多复杂?如果不复杂,那么仅仅是一个就可以了。@Stribizev那么我需要在其中放置字符类。您的评论已经很有趣了(因此请添加作为答案)。我正在检查它是否真的足以完全满足需要。@Stribizev我更新了OP。你的建议确实有效-即使是对于扩展的范围。请创建一个答案-并可能添加一些解释。