Java:正则表达式转义正则表达式

7 java regex

Web Service返回此示例数据

200,6,"美国加利福尼亚"

我想将它们拆分split(",")并尝试使用简单的代码查看结果.

String loc = "200,6,\"California, USA\"";       
String[] s = loc.split(",");

for(String f : s)
   System.out.println(f);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这是结果

200
6
"California
 USA"
Run Code Online (Sandbox Code Playgroud)

预期的结果应该是

200
6
"California, USA"
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的正则表达式,没有运气.是否有可能逃避内部给定的正则表达式""

更新1:添加了C#代码

更新2:删除了C#代码

小智 3

,(?=(?:[^"]|"[^"]*")*$)
Run Code Online (Sandbox Code Playgroud)

这是您想要的正则表达式(要将其放入 split 函数中,您需要转义字符串中的引号)

解释

您需要找到所有不在引号中的 ', 。也就是说,您需要向前查找 ( http://www.regular-expressions.info/lookaround.html ) 来查看当前匹配的逗号是否在引号内或引号外。

为此,我们使用前瞻来基本上确保当前匹配的 ',' 后跟偶数个 '"' 字符(意味着它位于引号之外)

So (?:[^"]|"[^"]*")*$表示仅当末尾有非引号字符或一对引号之间有任何内容时才匹配

(?=(?:[^"]|"[^"]*")*$)将向前查找上述匹配项

,(?=(?:[^"]|"[^"]*")*$)最后,这将与上面的前瞻匹配所有“,”