替换json文件中的值之间的文本

时间:2015-02-05 03:14:36

标签: java regex json

我需要删除一部分JSON文件,并用通用值替换。当前数据类似于:

"owned": {},
[START]  "95cdecf3-3746-45ba-94bb-ad7314037108"
],
"loggedIn": false,

不要问[START]如何到达那里:)我试图用[START] [/ END]替换这个字段,但它全部搞砸了,而且我发现了650次#&# 39;感觉就像手动更换。

如何在文件中的所有匹配项中替换由以下内容包围的文本?

[START]
],
"loggedIn": false,

使用以下json "invited": []行?所以上面的输入应该看起来像:

"owned": {},
"invited:" [],
"loggedIn": false,

1 个答案:

答案 0 :(得分:1)

使用string.replaceAll功能。

String s = "\"owned\": {},\n" + 
                "[START]  \"95cdecf3-3746-45ba-94bb-ad7314037108\"\n" + 
                "],\n" + 
                "\"loggedIn\": false,";
System.out.println(s.replaceAll("(?s)(?<=\\n|^)\\[START\\].*?(?=\\n\"loggedIn\":)", "\"invited:\" [],"));

<强>输出:

"owned": {},
"invited:" [],
"loggedIn": false,

(?s)调用了DOTALL修饰符,它使你的正则表达式中的点匹配偶数换行符。 (?<=\\n|^)肯定的后视,断言匹配必须以换行符或行锚的开头开头。这样它就会匹配开头出现的字符串[START],否则它会匹配一行中间或最后一个字符串[START]

(?m)^\[START\][\s\S]*?(?=\n\"loggedIn\":)

DEMO

System.out.println(s.replaceAll("(?m)^\\[START\\][\\s\\S]*?(?=\\n\"loggedIn\":)", "\"invited:\" [],"));