正则表达式以分割key = value

Max*_*huk 4 java regex string split

我有一个像这样的字符串:

KEY1=Value1, KE_Y2=[V@LUE2A, Value2B], Key3=, KEY4=V-AL.UE4, KEY5={Value5}
Run Code Online (Sandbox Code Playgroud)

我需要将其拆分以获得具有键值对的Map.值[]应该作为单个值传递(KE_Y2是一个键,[V@LUE2A, Value2B]是一个值).

我应该用什么正则表达式正确分割它?

Boh*_*ian 8

第一次拆分有一个神奇的正则表达式:

String[] pairs = input.split(", *(?![^\\[\\]]*\\])");
Run Code Online (Sandbox Code Playgroud)

然后用简单的"="分割每个键/值:

for (String pair : pairs) {
    String[] parts = pair.split("=");
    String key = parts[0];
    String value = parts[1];
}
Run Code Online (Sandbox Code Playgroud)

把它们放在一起:

Map<String, String> map = new HashMap<String, String>();
for (String pair : input.split(", *(?![^\\[\\]]*\\])")) {
    String[] parts = pair.split("=");
    map.put(parts[0], parts[1]);
}
Run Code Online (Sandbox Code Playgroud)

瞧!


魔法正则表达式的解释:

正则表达式是"逗号后面跟着任意数量的空格(所以键名没有前导空格),但只有遇到下一个括号不是一个紧密的括号"