从 Ruby 中的字符串中删除所有空格

Removing all whitespace from a string in Ruby

如何从 Ruby 中的字符串中删除所有换行符和空格?

例如,如果我们有一个字符串:

"123\n12312313\n\n123 1231 1231 1"

应该变成这样:

"12312312313123123112311"

也就是说,应删除所有空格。

您可以使用类似的东西:

var_name.gsub!(/\s+/, '')

或者,如果您想 return 更改的字符串,而不是修改变量,

var_name.gsub(/\s+/, '')

这还可以让您将它与其他方法链接起来(即 something_else = var_name.gsub(...).to_i 去除空格,然后将其转换为整数)。 gsub! 将就地编辑它,因此您必须编写 var_name.gsub!(...); something_else = var_name.to_i。严格来说,只要有至少一个改变,gsub! 就会 return 新版本(即同样的东西 gsub 会 return),但有机会你得到一个没有空格的字符串,它会 return nil 并且事情会中断。因此,如果您要链接方法,我更喜欢 gsub

gsub 通过将第一个参数的任何匹配项替换为第二个参数的内容来工作。在这种情况下,它会用正则表达式 /\s+/ 匹配任何连续的空白字符序列(或只是一个空白字符),然后用空字符串替换它们。如果你想对匹配的部分做一些处理,而不是直接替换,还有一个块形式;有关详细信息,请参阅 String#gsub

class Regexp 的 Ruby 文档是学习更多正则表达式的良好起点——我发现它们在很多方面都很有用在这里或那里几毫秒不算数并且您不需要匹配可以任意深度嵌套的东西的情况。

正如 Gene 在他的评论中所建议的那样,您也可以使用 tr:

var_name.tr(" \t\r\n", '')

它以类似的方式工作,但它不是替换正则表达式,而是将调用它的字符串中第一个参数的第 n 个字符的每个实例替换为第二个参数的第n个字符,如果没有则什么都不带。有关详细信息,请参阅 String#tr

或者,您可以 scan 数字字符串 /\d+/join 结果:

string = "123\n\n12312313\n\n123 1231 1231 1\n"

string.scan(/\d+/).join
#=> "12312312313123123112311"

请注意,这也会删除字母字符、破折号、符号,基本上所有非数字的内容。

您也可以使用 String#delete:

str = "123\n12312313\n\n123 1231 1231 1"

str.delete "\s\n"
  #=> "12312312313123123112311"

您可以使用 String#delete! 原地修改 str,但请注意 delete! returns nil 如果没有进行任何更改