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

时间:2015-05-14 01:10:37

标签: ruby string whitespace

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

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

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

它应该成为这个:

"12312312313123123112311"

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

4 个答案:

答案 0 :(得分:31)

您可以使用以下内容:

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

或者,如果要返回更改的字符串,而不是修改变量,

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

这也可以让你用其他方法链接它(即something_else = var_name.gsub(...).to_i去除空白然后将其转换为整数)。 gsub!会对其进行编辑,因此您必须编写var_name.gsub!(...); something_else = var_name.to_i。严格地说,只要至少进行了一次更改,gsub!将返回新版本(即gsub将返回相同的内容),但是您有可能获得一个字符串没有空格,它会返回nil,事情就会破裂。因此,如果您使用链接方法,我会更喜欢gsub

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

Regexp的Ruby文档是了解正则表达式的一个很好的起点 - 我发现它们在这里或那里几毫秒的各种情况下都很有用不要计算,你不需要匹配可以任意嵌套的东西。

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

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

它以类似的方式工作,但它不是替换正则表达式,而是用 n <替换它调用的字符串中第一个参数的 n 字符的每个实例。 / em>第二个参数的第二个字符,如果没有,则没有任何内容。有关详细信息,请参阅String#tr

答案 1 :(得分:6)

您也可以使用String#delete

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

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

您可以使用String#delete!修改str,但如果没有更改,请注意delete!返回nil

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:-2)

通过这种方法在Ruby中删除字符串上的空格(如标题所示)更加简单快捷:

pry(main)> a = " 2323 565 67 "
=> " 2323 565 67 "
pry(main)> a.delete(' ')
=> "232356567"