我有一个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, "")
}
但是我的正则表达式显然不正确。谁能找到我出错的地方?
答案 0 :(得分:2)
This regex \\"foos\\": {(.*?)}
应该符合您的要求,在大多数正则表达式引擎中,您可能需要将"
替换为\"
。如果您的JSON可以包含其他大括号,则可以使用this \\"foos\\": \{(?>[^()]|(?R))*\}
,它使用递归来匹配平衡的括号组。请注意,这个只适用于pcre正则表达式引擎,其他人不支持递归。
答案 1 :(得分:2)
以下是我提出的两个解决方案,希望它有所帮助。我想你忘了用git blame
等处理可能的空格。
--follow