正则表达式.*List\((.*)\).*
工作
使用Scala的正则表达式和模式匹配在一起,然后分裂与任何(,)
然后group
正则表达式包含提取
val r = """.*List\((.*)\).*""".r
图案在正则表达式使用提取匹配
val result = str match {
case r(value) => value
case _ => ""
}
使用任何的再拆(
或,
或)
然后group
result.split("""[(|,|)]""").filterNot(s => s.isEmpty || s.trim.isEmpty)
.grouped(2)
.toList
.map(pair => (pair(0), pair(1))).toList
斯卡拉REPL
scala> val str = """some garbage string PARAMS=List((foo, bar), (foo1, bar1)) some garbage string"""
str: String = "some garbage string PARAMS=List((foo, bar), (foo1, bar1)) some garbage string"
scala> val r = """.*List\((.*)\).*""".r
r: util.matching.Regex = .*List\((.*)\).*
scala> val result = str match {
case r(value) => value
case _ => ""
}
result: String = "(foo, bar), (foo1, bar1)"
scala> result.split("""[(|,|)]""").filterNot(s => s.isEmpty || s.trim.isEmpty).grouped(2).toList.map(pair => (pair(0), pair(1))).toList
res46: List[(String, String)] = List(("foo", " bar"), ("foo1", " bar1"))
你明确的告诉它只匹配第一个()当你写\(([^)] +)\),没有你意识到了吗? –
试试[this one](http://regexr.com/3e8kn)。 –