Ruby由空格分割

时间:2012-11-24 03:13:36

标签: ruby split whitespace

如何编写一个Ruby函数,用任何类型的空格分割输入,并从结果中删除所有空格?例如,如果输入是

 aa bbb
cc    dd ee

然后返回一个数组["aa", "bbb", "cc", "dd", "ee"]

5 个答案:

答案 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"]