仅当某种模式前后不匹配时,我如何使用正向和负向后方匹配?

问题描述 投票:0回答:1

我正在尝试用逗号分割字符串,但是如果逗号用引号引起来,我不想分割。

这是我想要做的:

String s = "today,\"is, clear\",and sunny";
String[] split = s.split("(?>!\"[0-z]*),(?![0-z]*\")");

[split的内容为["today", "\"is, clear\"", "and sunny"],但是我无法使正则表达式正常工作。

java regex string regex-lookarounds
1个回答
0
投票

一个选项是使用否定的超前行,该断言断言仅当跟随even个双引号时才发生逗号分割。意识到双引号内的逗号后面总会有奇数个双引号,前提是您的引号始终是平衡的。

String s = "today,\"is, clear\",and sunny";
String[] parts = s.split(",(?!.*\"(?:.*\".*\")*$)");
System.out.println(Arrays.toString(parts));

此打印:

[today, "is,  clear", and sunny]
© www.soinside.com 2019 - 2024. All rights reserved.