如何从Ruby中的字符串中删除所有换行符和空格?
例如,如果我们有一个字符串:
"123\n12312313\n\n123 1231 1231 1"
它应该成为这个:
"12312312313123123112311"
也就是说,应删除所有空格。
答案 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"