我有一个格式为<key1,value1,key2,value2..keyn,valuen>
为了处理可能有内部逗号的值,我使用了以下逻辑: 写作时
String key = ",KEY1,";
String value = "valu,e";
if(value.contains(",")) {
value = value.replace(",","\\\\,");
}
//now this key value pair is added to an existing string like above mentioned.
阅读(分裂)
String[] tokens = stringkeyvaluepair.split("(?<!\\\\),");
for(int i = 0; i < tokens.length; i += 2) {
if(tokens[i+1].contains("\\,")) {
tokens[i+1] = tokens[i+1].replace("\\\\,",",");
}
}
现在我的零宽度负向后向正则表达式表达式一直工作,直到我的值我有一个结尾\。在这种情况下,它不会从下一个键中分割该值。例如:
String value = "valu,e\\";
在调试器中,索引的令牌数组值显示为:"val\\,ue\,KEY2"
我可以通过将此值(val\\,ue\
)与键(KEY2
)分开来使我的正则表达式更加智能,或者我是否必须提供结束\的检查,就像我在写中的逗号一样逻辑?