如何编写一个Ruby函数,用任何类型的空格分割输入,并从结果中删除所有空格?例如,如果输入是
aa bbb
cc dd ee
然后返回一个数组["aa", "bbb", "cc", "dd", "ee"]
。
答案 0 :(得分:47)
这是String#split
的默认行为:
input = <<-TEXT
aa bbb
cc dd ee
TEXT
input.split
结果:
["aa", "bbb", "cc", "dd", "ee"]
这适用于我测试的所有Ruby版本,包括1.8.7,1.9.3,2.0.0和2.1.2。
答案 1 :(得分:42)
以下内容适用于您提供的示例:
str.gsub(/\s+/m, ' ').strip.split(" ")
它返回:
["aa", "bbb", "cc", "dd", "ee"]
代码的含义:
/\s+/m
是更复杂的部分。 \s
表示空格,因此\s+
表示一个或多个空白字母。在/m
部分中,m
被称为修饰符,在这种情况下,它意味着多行,意味着访问许多行,而不仅仅是默认行为。
因此,/\s+/m
表示查找一个或多个空格的序列。
gsub
表示全部替换。
strip
相当于其他语言中的trim
,并从字符串的前端和末尾删除空格。
因为,我正在编写解释,可能是你在字符串的结尾或开头处最终得到和结束字符的情况。
安全
代码可以写成:
str.gsub(/\s+/m, ' ').gsub(/^\s+|\s+$/m, '').split(" ")
所以如果你有:
str = "\n aa bbb\n cc dd ee\n\n"
然后你会得到:
["aa", "bbb", "cc", "dd", "ee"]
新代码的含义:
^\s+
字符串开头的一系列空格
\s+$
字符串末尾的一系列空格
所以gsub(/^\s+|\s+$/m, '')
意味着删除字符串开头和字符串末尾的任何空格序列。
答案 2 :(得分:21)
input = <<X
aa bbb
cc dd ee
X
input.strip.split(/\s+/)
答案 3 :(得分:6)
input.split("\s")
如果使用"\s"
代替/\s/
,则会从结果中删除白色步伐。
答案 4 :(得分:5)
作为对Vidaica答案的略微修改,在Ruby 2.1.1中它看起来像
input.split(" ")
将补偿所有空格,无论是空格,制表符还是换行符,都会产生:
["aa", "bbb", "cc", "dd", "ee"]