仅在Scala中提取与Regex的第一个匹配项

时间:2014-10-30 18:24:40

标签: regex json scala

我试图从Scala中的JSON格式的字符串中提取特定的字符串值。但是,这将用于生产环境,所以我关注效率。目前,我目前正在使用以下代码:

val r = """identifier=\{S: ([\w\.]+),""".r
var identifier: String = "";
r.findAllIn(queryResult toString).matchData foreach {
  m => identifier = m.group(1)
}

我关心的是效率。我不需要验证JSON本身(这是由AWS生产的,所以我认为它很好,即使它不是,我可以&# 39;不要改变它,所以没有充分的理由去解析它的所有开销。

那就是说,我可以用正则表达式更有效地做到这一点,还是我必须下到找到第一次出现的标识符= {S:'然后下一次出现','之后,获得两者之间的子串?我试图用r.findFirstIn做一些事情,但我无法找到一种从中提取我想要的群体的方法。

还是有其他一些超级高效的东西,我不知道我可以做什么?

1 个答案:

答案 0 :(得分:0)

你想要第一场比赛:

r.findFirstMatchIn(queryResult.toString).map(_.group(1))

(将是Option[String]。)

那就是说,我每次都使用流式JSON解析器而不是正则表达式。是的,正则表达式更快,但除非这是真的瓶颈,否则我会更加担心准确性。