替换引号之间的一些特殊字符

Replacing some special characters between quotes

提问人:kaaas 提问时间:3/21/2017 最后编辑:Bohemiankaaas 更新时间:3/21/2017 访问量:1366

问:

我想替换 JSON 字符串中的点和单撇号字符,即仅在引用时。使用此输入:

String json = "{\"someJsonMap\":{\"with.dot.s\":1.0,\"'with.dots'.and.apostroph's.\":20.001}}";

我想把这个:

{"someJsonMap":{"with.dot.s":1.0,"with.dots'.and.apostroph's":20.001}}

进入这个:

{"someJsonMap":{"withdots":1.0,"withdotsandapostrophs":20.001}}

我感谢任何帮助、解决方案或解释。

Java 正则表达 式报价 replaceall

评论

0赞 Tim Biegeleisen 3/21/2017
不是我的反对票,但您很可能应该在这里使用 JSON 解析器。即使你用正则表达式破解它,如果结构后来发生变化,你的代码也很容易被破坏。
1赞 Henry 3/21/2017
使用正则表达式正确执行这有点棘手。以.{"with.dot.and\"quote": 1}
0赞 Bohemian 3/21/2017
@Henry这是一个引号字符,而不是撇号字符
0赞 kaaas 3/21/2017
感谢您的评论,我想出于安全原因,我会按照建议使用解析器。

答:

2赞 Bohemian 3/21/2017 #1

如果从未有过转义的引号,则使用“展望”来查找后面的数个引号。奇数表示您在引号内。

json = json.replaceAll("['.](?=(([^\"]*\"){2})*[^\"]*\"[^\"]*$)", "");

正则表达式的火车残骸断言,通过消耗引号对的倍数(0-n 通过),其余字符只有一个引号,后面跟着奇数个引号*([^\"]*\"){2}[^\"]*\"[^\"]*$

如果转义引号,你基本上不能使用正则表达式。

评论

0赞 kaaas 3/21/2017
谢谢!由于您的解释,我接受了您的答案,并且按预期工作。即使我的用例中不应该有任何转义引号,我也不能确定这一点,因此将使用 JSON 解析器。