我想使用空格拆分字符串,但不考虑双引号或单引号。
我尝试使用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'
。
有人可以帮我写正确的正则表达式吗?
答案 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"