use*_*961 -6 java regex parsing
我想解决这个问题.
, 逗号:拆分条款 " 双引号:字符串值(忽略特殊字符)[] 排列 例如:
输入: a=1,b="1,2,3",c=[d=1,e="1,2,3"]
预期产量:
a=1
b="1,2,3"
c=[d=1,e="1,2,3"]
Run Code Online (Sandbox Code Playgroud)
但我无法超越结果.
我写了下面的代码:
String line = "a=1,b=\"1,2,3\",c=[d=1,e=\"1,11\"]";
String[] tokens = line.split(",(?=(([^\"]*\"){2})*[^\"]*$)");
for (String t : tokens)
System.out.println("> " + t);
Run Code Online (Sandbox Code Playgroud)
我的输出是:
a=1
b="1,2,3"
c=[d=1
e="1,11"]
Run Code Online (Sandbox Code Playgroud)
我需要更改什么才能获得预期的输出?我应该坚持正则表达式还是其他解决方案更灵活,更容易维护?
Boh*_*ian 52
这个正则表达式可以解决这个问题:
",(?=(([^\"]*\"){2})*[^\"]*$)(?=([^\\[]*?\\[[^\\]]*\\][^\\[\\]]*?)*$)"
Run Code Online (Sandbox Code Playgroud)
它的工作原理是将先行在逗号后对匹配的方括号中的-如果你是里面的方括号内,你当然不会有平衡支架下面.
这是一些测试代码:
String line = "a=1,b=\"1,2,3\",c=[d=1,e=\"1,11\"]";
String[] tokens = line.split(",(?=(([^\"]*\"){2})*[^\"]*$)(?=([^\\[]*?\\[[^\\]]*\\][^\\[\\]]*?)*$)");
for (String t : tokens)
System.out.println(t);
Run Code Online (Sandbox Code Playgroud)
输出:
a=1
b="1,2,3"
c=[d=1,e="1,11"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
733 次 |
| 最近记录: |