val a="""\s*(abc)?.*(xyz)?""".r
val a(x,y)=" abcxyz"
我希望y是xyz,但实际上它是null,我怎么能提取xyz?它是可选的,但如果它在那里,那么我想提取它。
scala> val a="""\s*(abc)?.*(xyz)?""".r
a: scala.util.matching.Regex = \s*(abc)?.*(xyz)?
scala> val a(x,y)=" abcxyz"
x: String = abc
y: String = null
答案 0 :(得分:2)
问题是“。*”。
在到达“(xyz)”之前消耗整场比赛。
你可以添加“?”为了使比赛不贪婪“。*?”。
到Kleene-Starval a="""\s*(abc)?.*?(xyz)?""".r
//a: scala.util.matching.Regex = \s*(abc)?.*?(xyz)?
val a(x,y)=" abcxyz"
//x: String = abc
//y: String = xyz