正则表达式在括号之间提取部分字符串

时间:2016-09-19 07:13:11

标签: scala

我有以下字符串,我想从字符串中仅提取List((asdf, asdf), (fff,qqq)),行在我要提取的部分之前和之后有许多其他字符。

some garbage string PARAMS=List((foo, bar), (foo1, bar1)) some garbage string

我试过这些正则表达式

(?:PARAMS)=(List\((.*?)\))
(?:PARAMS)=(List\(([^)]+)\))

但它在group(1)

下面给出了以下输出
List((foo, bar)

1 个答案:

答案 0 :(得分:1)

正则表达式.*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

Scala 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"))