我需要通过简短的Java(不是JS!)Regex片段清理包含错误引用数字的JSON。我的例子:
[{"series":"a","x":"1","y":"111.71"},{"series":"a","x":"2","y":"120.25"}]
我需要获得的示例:
[{"series":"a","x":1,"y":111.71},{"series":"a","x":2,"y":120.25}]
所以我只需要在[0-9]之前或之后匹配并删除引号字符,但如何避免替换部分数字超出了我的低级正则表达式技能。
任何帮助都非常感谢!
编辑(第二轮):感谢您的快速反馈!我不太担心误报,因为我可以控制描述符的内容,我会确保它们只是文本。也可以避免空间,只会出现负数 - 好的!对于JSON,分隔符始终是逗号(“,”),double值的任意小数位数总是用点(“。”)分隔。遗憾的是,我无法修复JSON源代码,我当然希望用Java来清理它。
立即尝试建议并报告。我也会玩弄这个:http://www.regular-expressions.info/lookaround.html#lookbehind
答案 0 :(得分:3)
replaceAll("\"(-?\\d+([.]\\d+)?)\"","$1");
答案 1 :(得分:2)
这适用于您的具体示例,但如果其他数字的格式不同(请参阅我的评论),则不起作用:
String s = "[{\"series\":\"a\",\"x\":\"1\",\"y\":\"111.71\"},{\"series\":\"a\",\"x\":\"2\",\"y\":\"120.25\"}]";
String clean = s.replaceAll("\"(\\d+\\.?\\d*)\"", "$1");
System.out.println(clean);
输出:
[{"series":"a","x":1,"y":111.71},{"series":"a","x":2,"y":120.25}]