我有以下字符串,我想从字符串中仅提取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)
答案 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"))