java – 正则表达式使用空格分割字符串但不考虑双引号或单引号

我想使用空格拆分字符串,但不考虑双引号或单引号。

我没有尝试使用Regex在没有单引号或双引号的情况下使用空格分割字符串,但在某些情况下它失败了。

Input : It is a "beautiful day"'but i' cannot "see it" 

输出应该是

 It is a "beautiful day"'but i' cannot "see it" 

上面链接中的正则表达式导致了

 It is a "beautiful day" 'but i' cannot "see it" 

我想要"beautiful day"'but i'在一条线上。

有人可以帮我写正确的正则表达式吗?

这个正则表达式通过了你的测试:

 " (?=(([^'\"]*['\"]){2})*[^'\"]*$)" 

它在空间上分裂,但只有当空间不在引号内时,它才会通过使用前瞻来断言空间后面有偶数引号来测试它。

有一些边缘情况不适用,但如果您的输入“格式良好”(即报价是平衡的),这将适合您。 如果报价不平衡,它仍然可行 – 您需要使用两个预测 – 每个报价类型一个。


这是一些测试代码:

 String s = "It is a \"beautiful day\"'but i' cannot \"see it\""; String[] parts = s.split(" (?=(([^'\"]*['\"]){2})*[^'\"]*$)"); for (String part : parts) System.out.println(part); 

输出:

 It is a "beautiful day"'but i' cannot "see it"