Java Regex在要拆分的字符串中标识JSON,使用:separator

Java Regex在要拆分的字符串中标识JSON,使用:separator,java,json,regex,string,split,Java,Json,Regex,String,Split,我有一个正在使用:(冒号)作为分隔符拆分的输入字符串。该字符串可以包含所有字符串值,也可能包含作为该传入字符串一部分的json对象本身 例如: 案例1:123:HARRY_POTTER:英格兰:男性 案例2:123:HARRY_POTTER:[{“key”:“City”,“value”:“LONDON”}]:男性 有一些代码使用str.split(“:”),它正在处理案例1,但对于案例2,由于字符串的json部分包含:(在拆分时将被忽略),程序会中断 我需要一个正则表达式,它可以(1)识别字符串

我有一个正在使用
(冒号)作为分隔符拆分的输入字符串。该字符串可以包含所有字符串值,也可能包含作为该传入字符串一部分的json对象本身

例如:

案例1:123:HARRY_POTTER:英格兰:男性

案例2:123:HARRY_POTTER:[{“key”:“City”,“value”:“LONDON”}]:男性

有一些代码使用
str.split(“:”)
,它正在处理案例1,但对于案例2,由于字符串的json部分包含
(在拆分时将被忽略),程序会中断

我需要一个正则表达式,它可以(1)识别字符串中的json,以及(2)如果
前面跟
”:“
)出现在json字符串中,则它不会拆分

因此,如果字符串被识别为包含json,我可以使用
str.split()

我到达这些正则表达式是为了匹配
之前的
,不幸的是,这些正则表达式都没有工作:

消极落后:
(?和
(?)


正面回顾:
(?请尝试regex
(?以获取示例数据,也许它足以匹配从
[
]
或匹配除
之外的任何字符:

但是,由于这些数据是混合的,所以很难确定什么是实际有效的json,之后还需要进行验证

请注意,这是一个脆弱的解决方案,不考虑方括号的任何嵌套

\[[^]\[\r\n]+]|[^\r\n:]+
  • \[^]\[\r\n]+]
    匹配自
    […]
  • |
  • [^\r\n::+
    匹配除
    或换行符以外的任何字符的1+倍
请参阅一个示例和演示

范例

String regex = "\\[[^]\\[\\r\\n]+]|[^\\r\\n:]+";
String string = "123:HARRY_POTTER:[{\"key\":\"City\", \"value\":\"LONDON\"}]:MALE";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println(matcher.group(0));
}
输出

123
HARRY_POTTER
[{"key":"City", "value":"LONDON"}]
MALE

我认为这对于正则表达式来说太复杂了。使用正则表达式进行解析通常是个坏主意。获取JSON解析器。
String regex = "\\[[^]\\[\\r\\n]+]|[^\\r\\n:]+";
String string = "123:HARRY_POTTER:[{\"key\":\"City\", \"value\":\"LONDON\"}]:MALE";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println(matcher.group(0));
}
123
HARRY_POTTER
[{"key":"City", "value":"LONDON"}]
MALE