Java/正则表达式:不在{}、[]或";内使用逗号拆分字符串&引用;?
如果我有如下字符串(碰巧看起来很像JSON): 我怎样才能将该字符串仅用不出现在Java/正则表达式:不在{}、[]或";内使用逗号拆分字符串&引用;?,java,regex,string,parsing,Java,Regex,String,Parsing,如果我有如下字符串(碰巧看起来很像JSON): 我怎样才能将该字符串仅用不出现在{}、[]或“中的逗号分割,从而得到以下分隔的字符串: “名称”:“前积云” “作者”:[“布利策”、“斯图尔特”] “出版商”:{“名称”:“麦格劳·希尔”,“年份”:“2012年”, “城市”:[“纽约”、“伦敦”、“多伦多”] } 我知道,只需一个循环,检查给定的逗号是否在{}、[]或“之间,然后有选择地进行拆分,就可以轻松完成上述拆分,但使用正则表达式似乎是一个更干净的选项,因此,任何帮助都将不胜感激 让我知
{}
、[]
或“
中的逗号分割,从而得到以下分隔的字符串:
我知道,只需一个循环,检查给定的逗号是否在
{}
、[]
或“
之间,然后有选择地进行拆分,就可以轻松完成上述拆分,但使用正则表达式似乎是一个更干净的选项,因此,任何帮助都将不胜感激 让我知道这是否适用于您的目的:
"[^,[{]++(?=,)|".*?[]}]++
匹配一个字符串,该字符串以双引号开头,后跟任何非逗号或左括号的内容,直到找到后跟逗号的字符为止
-或-
一种字符串,以双引号开头,后跟尽可能少的字符,直到到达一个或多个右括号
更新
我忍不住用这个来解释线路终止符
(?=.+?{)[\s\S]+?}|(?=.+?\[)[\s\S]+?]|[^,[{]+?(?=,)
需要对lookaheads的支持
向前查找一个{,如果它找到一个,则匹配直到它找到一个}或
查找一个[如果它找到一个,则匹配直到找到]或
在找到后跟逗号的字符之前,不要匹配逗号或左括号/大括号。Regex是错误的工具。相反,您应该使用JSON解析器。看看谷歌的GSON库:这里有一个类似的CSV问题。基于这里的讨论,我怀疑正则表达式是否会更干净。@TimBiegeleisen如果我正在尝试构建自己的JSON解析器呢?(当然是一种学习经验),那么继续构建一个解析器吧。您可能需要使用堆栈。正则表达式甚至可能是解决方案的一部分,但要求我们使用正则表达式来处理复杂的JSON结构并不是解决这个问题的方法。2) 如果您的目标是学习如何编写自己的解析器,那么要求我们为您编写正则表达式不是正确的方法。
(?=.+?{)[\s\S]+?}|(?=.+?\[)[\s\S]+?]|[^,[{]+?(?=,)