Java-具有冲突正则表达式的string.split

时间:2018-10-25 15:25:38

标签: java regex string split

我最近遇到了这个问题,不知道如何解决。我知道在String类中,我们有一个split方法,它接受一个正则表达式,并基于正则表达式将给定的字符串拆分为不同的字符串并以字符串数组形式返回。

例如,如果我有,

String s = "A,B,C";

我愿意,

System.out.println(Arrays.toString(s.split(",")));

它将打印[A,B,C]到输出控制台。

现在让我们说我的字符串是

String s = "A,\"\"B\"\",\"\"C\"\",D";   //easier to read version: A,""B"",""C"",D

然后我使用以下正则表达式分割字符串,

String regex = ",|,\"\"|\"\",|\"\",\"\"";  // matches , OR ,"" OR "", OR "",""
System.out.println(Arrays.toString(s.split(regex)));

我得到的输出为[A,“” B,“” C,D]。拆分在这里如何进行?以及如何定义我的正则表达式,以便获得[A,B,C,D]作为输出?

注意:我知道我想要实现的目标可以通过其他方式来完成(例如replaceAll方法),但是我只想使用String.split解决此问题,因为我想知道在这种情况下如何使用它

2 个答案:

答案 0 :(得分:6)

始终从最大到最小订购替代品:

String regex = "\"\",\"\"|,\"\"|\"\",|,";

答案 1 :(得分:2)

here所述,正则表达式引擎急于在成功匹配逗号(第一个替换项)后停止。另一个答案是解决此问题的一种方法。另一种方法是使用量词:

<endpointBehaviors>
  <behavior name="endpointBehavior">
    <enableWebScript />
    <webHttp defaultBodyStyle="Wrapped" defaultOutgoingResponseFormat="Json" />
  </behavior>
</endpointBehaviors>

Regex101上查看其工作原理