按空格拆分字符串,忽略转义的空格

时间:2017-01-17 14:59:06

标签: ruby regex string split literals

我一直在使用Percentage Strings Literal"one two three four\ five"之类的字符串转换为数组。

%w(one two three four\ five)

返回:

["one", "two", "three", "four five"]

现在我想动态地执行此操作,因此可以再使用Literals。

我可以使用哪种正则表达式将上面的字符串转换为数组?

我正在寻找一个正则表达式模式,以放入一个将"one two three four\ five"并返回["one", "two", "three", "four five"]的红宝石拆分方法。

注意:我只想按未转义的空格分割,如上所述。将四个和五个组合成相同的字符串,因为分隔它们的空格被转义。

3 个答案:

答案 0 :(得分:2)

如果你的字符串没有转义序列,你可以使用

分割方法
.split(/(?<!\\)\s+/)

此处,(?<!\\)\s+匹配1 +空格(\s+),前面没有\

如果你的字符串可能包含转义序列,那么匹配方法更可取,因为它更可靠:

.scan(/(?:[^\\\s]|\\.)+/)

请参阅Ruby demo

它将匹配除\和空格(带[^\\\s])以外的1个或多个字符以及任何转义序列(与\\.匹配),反斜杠+除换行符之外的任何字符)。

要摆脱\符号,您必须稍后使用gsub

答案 1 :(得分:1)

你可以试试这个:

(?<!\\)\s+

Explanation

样品:

a='one two three four\ five';
b=a.split(/(?<!\\)\s+/);
print(b);

Run here

答案 2 :(得分:1)

试试这个

require 'shellwords'

'one two three four\ five'.shellsplit
# => ["one", "two", "three", "four five"]

无需正则表达式。