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