xinlangisasb
2012-06-09 12:55
浏览 177
已采纳

关于一个java正则表达式替换的问题

一个很简单的json串:String json = "{\"name1\":\"value1\",\"na\"me2\":\"va\"lue2\"}";

问题是:现在key和value的值中都有可能出现双引号,需要将key或value中值的双引号(不管中间有多少个双引号都替换,边界的不能替换)替换味单引号;现在
json= json.replaceAll("\"(\w*)\"(\s*:\s*)", "'$1'$2");
json= json.replaceAll("(\s*:\s*)\"(\w*)\"", "$1'$2'");

都达不到要求....

替换成功打印到控制台后希望是:{"name1":"value1","na'me2":"va'lue2"}

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • Person C 2012-06-10 12:22
    已采纳

    [code="java"]json = json.replaceAll("\"", "'").replaceAll("([\{\:\,])\'", "$1\"").replaceAll("\'([\}\:\,])", "\"$1");[/code]

    已采纳该答案
    打赏 评论
  • 晓星 2012-06-09 13:29

    不一定要用正则表达式嘛,反正我写不出来,我倒是有个思路可以解决!

    1.替换字符中的所有空格字符串为非空格
    解决"name":"value1","na"me2":"value2","name3" : " value3 "
    解决空格问题;

    2.用正则表达式将字符分组String reg="(":"\b|","\b)";
    String[] arr=s.split(reg);

    3.循环查找替换arr[i]中"字符不在开头或者结尾的字符!

    打赏 评论
  • Person C 2012-06-10 12:47

    如果每个key或者value中只有连续出现的 " 一次或多次,就更简单
    [code="java"]json = json.replaceAll("(\w+)\"+(\w+)", "$1\'$2");[/code]

    打赏 评论
  • ll89308839 2012-06-10 13:21

    [color=red]写了半天,老报错,负向断言的时候里面不能用.*?贪婪匹配 (希望有人能告诉我为什么) [/color]
    用的.(1,Integer.MAX_VALUE-1)?进行贪婪匹配
    [code="java"]
    Pattern p = Pattern.compile("(?<=(\{|,|:)\"(.{1,"+(Integer.MAX_VALUE-1)+"}?))\"(?=.+?\"(:|,|\}))");
    [/code]

    打赏 评论
  • ahzean 2012-06-10 20:32

    一个效率不太高的方法:

    String json = "{\"name1\":\"value1\",\"na\"me2\":\"va\"lue2\"}";
    Pattern p = Pattern.compile("\w+(\")\w+");
    Matcher m = p.matcher(json); // 获得匹配器对象
    while (m.find()) {
    json=json.replace(m.group(),m.group().replaceAll("\"",""));
    }
    System.out.println(json);

    打赏 评论
  • ll89308839 2012-06-11 09:27

    上面写错了点
    [code="java"]
    json = json.replaceAll("(?<=(\{|,|:)\"\w{1,100})\"(?=\w+\"(:|,|\}))","'");
    [/code]

    打赏 评论
  • ll89308839 2012-06-11 09:57

    上面还是写错了!好像忘记匹配多个“了
    这个就对了
    [code="java"]
    public static void main(String[] args) {
    String json = "{\"name1\":\"value1\",\"na\"me2\":\"va\"l\"u\"e2\"}";
    System.out.println(json);
    Pattern p = Pattern.compile("(?<=(\{|,|:)\").*?(?=\"(:|,|\}))");
    Matcher m = p.matcher(json);
    while(m.find()){
    String tmp = m.group();
    json = json.replaceAll(tmp, tmp.replaceAll("\"","'"));
    }
    System.out.println(json);
    }
    [/code]

    打赏 评论

相关推荐 更多相似问题