java—替换方括号中特定单词的所有内容

liwlm1x9  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(277)

我有以下字符串(在多行上):

"locationIds": [
      "london",
      "scotland",
      "wales"
    ],
    "bannerIds": [
      "red banner",
      "blue"
    ],
    "regionIds": [

    ],

我正试图删除“bannerids”方括号中的所有内容,因此我只剩下一个完整的字符串,如下所示:

"locationIds": [
      "london",
      "scotland",
      "wales"
    ],
    "bannerIds": [

    ],
    "regionIds": [

    ],

我试过用regex做下面的替换,但是我没有任何运气(我仍然得到原来的横幅)。

string.replaceAll("\"bannerIds\":\[((?s).*[\n\r].*(.*?))\]", "\"bannerIds\": []");

我该怎么做?
注:
字符串顺序可能不同(取决于响应和我们获取数据的顺序)。
bannerid可能并不总是在那里,所以我们需要迎合这种需求

brgchamk

brgchamk1#

我不熟悉json。你在使用regex时遇到了问题,我愿意帮助你。你可以试着跟着regex。

("bannerIds".*?\[)[\s\S]+?(\])

细节: ("bannerIds".*?\[) :组1-捕获
"bannerIds": [ [\s\S]+? :尽可能少地匹配任何空白字符和任何非空白字符 (\]) :第2组:捕获 ] 演示
我还尝试在java上运行代码。

String str = "\"locationIds\": [\n"
  + "\t\"london\",\n"
  + "\t\"scotland\",\n"
  + "\t\"wales\"\n"
+"],\n"
+"\"bannerIds\": [\n"
+"\t\"red banner\",\n"
+"\t\"blue\"\n"  
+"],\n"
+"\"regionIds\": [\n"
+"\n"        
+"],\n";

  System.out.println("before replace");
  System.out.println(str);
  String result = str.replaceAll("(\"bannerIds\".*?\\[)[\\s\\S]+?(\\])", "$1$2");
  System.out.println("after replace");

  System.out.println(result);

结果:

before replace
"locationIds": [
    "london",
    "scotland",
    "wales"
],
"bannerIds": [
    "red banner",
    "blue"
],
"regionIds": [

],

after replace
"locationIds": [
    "london",
    "scotland",
    "wales"
],
"bannerIds": [],
"regionIds": [

],

相关问题