字符串替换Scala中的嵌套JSON

时间:2016-11-07 12:49:07

标签: regex scala

我有一个Scala方法,它将被赋予一个像这样的字符串:

"blah blah sediejdri \"foos\": {\"fizz\": \"buzz\"}, odedrfj49 blah"

我需要删除JOS"" foos JSON"使用纯Java / Scala(没有外部库)。也就是说,找到与模式匹配的子字符串:

\"foos\" : {ANYTHING},

...并将其删除,以便输入字符串现在为:

"blah blah sediejdri  odedrfj49 blah"

要搜索的令牌始终\"foos\",但JSON花括号内的内容将始终不同。我最好的尝试是:

// Ex:  "blah \"foos\": { flim flam }, blah blah"  ==>  "blah  blah blah", etc.
def stripFoosJson(var : toClean : String) : String = {
    val regex = ".*\"foos\" {.*},.*"
    toClean.replaceAll(regex, "")
}

但是我的正则表达式显然不正确。谁能找到我出错的地方?

2 个答案:

答案 0 :(得分:2)

This regex \\"foos\\": {(.*?)}应该符合您的要求,在大多数正则表达式引擎中,您可能需要将"替换为\"。如果您的JSON可以包含其他大括号,则可以使用this \\"foos\\": \{(?>[^()]|(?R))*\},它使用递归来匹配平衡的括号组。请注意,这个只适用于pcre正则表达式引擎,其他人不支持递归。

答案 1 :(得分:2)

以下是我提出的两个解决方案,希望它有所帮助。我想你忘了用git blame等处理可能的空格。

--follow