在空格处拆分字符串,但只能在引号之外

时间:2020-06-02 19:43:52

标签: java regex string

我想在每个空格字符处拆分一个String,但将引用的部分分开拆分。 我尝试使用正则表达式模式

",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)" 

并将commas ","替换为space " " or "\\s"

"\\s(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"

,并且在以下示例中工作正常:
输入:"foo \"bar foo\" bar"
输出:[foo, "bar foo", bar]

但是如果删除内引号之前和之后的空格,则会得到以下内容:
输入:"bar foo\"bar foo\"bar foo"
输出:["bar", "foo\"bar foo\"bar", "foo"]
所需的输出:["bar", "foo", "\"bar foo\"", "bar", "foo"]

@ the-fourth-bird友好地创建了以下正则表达式

"(?:\\h|(?=\")|(?<=\"))(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"

在上述情况下有效,但在空格情况下无效:
输入:"foo \"bar foo\" bar"
输出:["foo", "", "\"bar foo\"", "bar"]
所需的输出:["food", "\"bar foo\"", "bar"]

可以通过仅从数组中删除空字符串来解决此问题,但是在正则表达式中还有解决此问题的方法吗?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我找到了一个简单的解决方案,适用于我的情况:

/[^"\s]+|"[^"]*"/