我一直在使用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"]
的红宝石拆分方法。
注意:我只想按未转义的空格分割,如上所述。将四个和五个组合成相同的字符串,因为分隔它们的空格被转义。
答案 0 :(得分:2)
如果你的字符串没有转义序列,你可以使用
分割方法.split(/(?<!\\)\s+/)
此处,(?<!\\)\s+
匹配1 +空格(\s+
),前面没有\
。
如果你的字符串可能包含转义序列,那么匹配方法更可取,因为它更可靠:
.scan(/(?:[^\\\s]|\\.)+/)
请参阅Ruby demo。
它将匹配除\
和空格(带[^\\\s]
)以外的1个或多个字符以及任何转义序列(与\\.
匹配),反斜杠+除换行符之外的任何字符)。
要摆脱\
符号,您必须稍后使用gsub
。
答案 1 :(得分:1)
你可以试试这个:
(?<!\\)\s+
样品:
a='one two three four\ five';
b=a.split(/(?<!\\)\s+/);
print(b);
答案 2 :(得分:1)
试试这个
require 'shellwords'
'one two three four\ five'.shellsplit
# => ["one", "two", "three", "four five"]
无需正则表达式。