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

时间:2014-02-07 12:31:17

标签: java regex split regex-greedy

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

我尝试使用Regex for splitting a string using space when not surrounded by single or double quotes但在某些情况下失败了。

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'

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

1 个答案:

答案 0 :(得分:5)

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

" (?=(([^'\"]*['\"]){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"