java - 拆分键=值的正则表达式

标签 java regex string split

我有这样一个字符串:

KEY1=Value1, KE_Y2=[V@LUE2A, Value2B], Key3=, KEY4=V-AL.UE4, KEY5={Value5}

我需要将其拆分以获得包含键值对的 Map。 [] 中的值应作为单个值传递(KE_Y2 是键,[V@LUE2A, Value2B] 是值)。

我应该使用什么正则表达式来正确拆分它?

最佳答案

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

String[] pairs = input.split(", *(?![^\\[\\]]*\\])");

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

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

综合起来:

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

瞧!


魔法正则解释:

正则表达式表示“逗号后跟任意数量的空格(因此键名没有前导空格),但前提是遇到的下一个括号不是右括号”

关于java - 拆分键=值的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16099975/

相关文章:

regex - 如何在匹配表达式后面的同一行内使用 sed

python - 获取每个字符出现的次数

java - Kotlin 无法获取所需的类型干扰 Array<Uri>!找到数组<Uri?>

java - 有意传递文件,我该如何检索它

java - Spring mvc 如何将请求参数绑定(bind)到Controller属性,如struts2

java - 无法使用Intellij中的Resteasy解决其他项目配置

regex - 增加字符串中的数字并将其填充为零

regex - 如何用正则表达式填充两个字符之间的间隙

python - 拆分小写和大写联合的句子

javascript - 带有字符串对象的 jQuery 选择器不起作用