此示例数据由Web Service返回
200,6,“California,USA”
我想用split(“,”)拆分它们,并尝试使用简单的代码查看结果.
String loc = "200,\"California,USA\""; String[] s = loc.split(","); for(String f : s) System.out.println(f);
不幸的是,这是结果
200 6 "California USA"
预期的结果应该是
200 6 "California,USA"
我尝试了不同的正则表达式,没有运气.是否有可能逃避“”中的给定正则表达式?
解决方法
,(?=(?:[^"]|"[^"]*")*$)
这是你想要的正则表达式
(要将它放在split函数中,你需要转义字符串中的引号)
说明
你需要找到所有’,’不在引号中..
那就是你需要预测(http://www.regular-expressions.info/lookaround.html)以查看当前匹配的逗号是在引号内还是在引号内.
要做到这一点,我们使用lookahead基本上确保当前匹配’,’后面跟着偶数个”’字符(意思是它位于引号之外)
所以
(?:[^“] |”[^“] *”)* $表示仅在非引号字符结束时匹配或者在它们之间有任何引号的引号
(?=(?:[^“] |”[^“] *”)* $)将预见上述比赛
,(?=(?:[^“] |”[^“] *”)* $)最后这将匹配所有’,’与上述前瞻