Ruby由空格分割

JJ *_*eck 41 ruby whitespace split

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

 aa bbb
cc    dd ee
Run Code Online (Sandbox Code Playgroud)

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

Aje*_*i32 50

这是默认行为String#split:

input = <<-TEXT
 aa bbb
cc    dd ee
TEXT

input.split
Run Code Online (Sandbox Code Playgroud)

结果:

["aa", "bbb", "cc", "dd", "ee"]
Run Code Online (Sandbox Code Playgroud)

这适用于我测试的所有Ruby版本,包括1.8.7,1.9.3,2.0.0和2.1.2.

  • @Shashank嗯,正如我在答案中提到的,我使用 Ruby 1.8.7、1.9.3、2.0.0 和 2.1.2 对此进行了测试,它们的工作原理与此处所示完全相同。1.8.7 早在 2008 年就已经发布了,所以即使回到这个答案时,OP 也没有理由不能只使用 `String#split`。不知道为什么直到现在还没人提到这一点...... (2认同)

Can*_*ide 45

以下内容适用于您提供的示例:

str.gsub(/\s+/m, ' ').strip.split(" ")
Run Code Online (Sandbox Code Playgroud)

它返回:

["aa", "bbb", "cc", "dd", "ee"]
Run Code Online (Sandbox Code Playgroud)

代码含义:

/\s+/m是更复杂的部分.\s意思是白色空间,所以\s+意味着一个或多个白色空格字母.在该/m部分中,m被称为修饰符,在这种情况下,它意味着,多行,意味着访问许多行,而不仅仅是一个默认行为.因此,/\s+/m意味着,找到一个或多个空格的序列.

gsub 意味着全部替换.

striptrim其他语言相同,并从字符串的前端和末尾删除空格.

因为,我正在编写解释,可能是在字符串的结尾或开头处最终得到和结束字符的情况.

为了安全起见

代码可以写成:

str.gsub(/\s+/m, ' ').gsub(/^\s+|\s+$/m, '').split(" ")
Run Code Online (Sandbox Code Playgroud)

所以如果你有:

str = "\n     aa bbb\n    cc    dd ee\n\n"
Run Code Online (Sandbox Code Playgroud)

然后你会得到:

["aa", "bbb", "cc", "dd", "ee"]
Run Code Online (Sandbox Code Playgroud)

新代码的含义:

^\s+ 字符串开头的一系列空格

\s+$ 字符串末尾的一系列空格

因此,gsub(/^\s+|\s+$/m, '')意味着删除字符串开头和字符串末尾的任何空格序列.


saw*_*awa 21

input = <<X
     aa bbb
cc    dd ee
X

input.strip.split(/\s+/)
Run Code Online (Sandbox Code Playgroud)


vid*_*ang 6

input.split("\s")
Run Code Online (Sandbox Code Playgroud)

如果"\s"使用而不是/\s/,将从结果中删除白色步伐.


J3R*_*3RN 5

作为对Vidaica答案的略微修改,在Ruby 2.1.1中它看起来像

input.split(" ")
Run Code Online (Sandbox Code Playgroud)

将补偿所有空格,无论是空格,制表符还是换行符,都会产生:

["aa", "bbb", "cc", "dd", "ee"]
Run Code Online (Sandbox Code Playgroud)