Java正则表达式替换双引号和单引号

时间:2013-02-15 13:08:48

标签: java regex

我正在收到一个看起来像的字符串:

"lang":"fr","fizz":"1","buzz":"Thank you so much."

真正的字符串很长但遵循逗号分隔的"key":"value"对的这种模式。我想删除key周围的所有双引号,我想用单引号替换围绕value s的双引号,这样我的字符串就会显示像这样:

lang:'fr',fizz:'1',buzz:'Thank you so much.'

我最好的尝试:

kvString = kvString.replaceAll("\"*\":", "*:");
kvString = kvString.replaceAll(":\"*\"", ":'*'");

System.out.println(kvString);

当我运行这个时,我会kvString看起来像:

"lang*:'*'fr","fizz*:'*1","buzz*:'*Thank you so much."

有人可以找到我出错的地方吗?提前谢谢。

2 个答案:

答案 0 :(得分:6)

String str = "\"lang\":\"fr\",\"fizz\":\"1\",\"buzz\":\"Thank you so much.\"";
System.out.println(str.replaceAll ("\"([^\"]*)\":\"([^\"]*)\"", "$1:'$2'"));

答案 1 :(得分:0)

您要做的是使用正则表达式将逗号分隔的字符串分解为一组关键字值对。每个逗号分隔的字符串都具有“关键字”:“值”的格式,您想要做的是将其转换为关键字:'value'。

为了做到这一点,你必须让正则表达式记住关键字并记住值,然后在replaceAll的输出中将字符串的那些部分放回另一个字符串。

stackoverflow, non cpaturing组提供有关群组的详细信息。这是article also talks about grouping syntax