如何在Ruby中删除超过一个空格字符?

4

Ruby 好的,如果字符串中有多个空格字符,我希望删除它们。我的意思是,假设我有这样一个文本:

I want to     learn ruby more and more.

看到“to”和“learn”之间有一个以上的空格字符,可能是一个制表符或几个空格。我想知道如何在文本文件中检测是否存在这样的情况,并将每个单词或字符串变成仅有一个空格。所以它会变成这样

I want to learn ruby more and more.

我可以使用Gsub吗?还是需要使用其他方法?我尝试了Gsub,但无法弄清如何正确实现它以产生我想要的结果。 希望我解释清楚了。非常感谢您的任何帮助。


1
str.split(" ").join(" ") 也可以使用,但直接操作字符串的方法更有效率。 - Cary Swoveland
4个回答

12

String#squeeze 可以删除连续重复的字符:

'I want to     learn ruby more and more.'.squeeze(' ')
# => "I want to learn ruby more and more."

8
你可以使用gsub将一个或多个空格(正则表达式/ +/)替换为单个空格:
'I want to     learn ruby more and more.'.gsub(/ +/, " ")
#=> "I want to learn ruby more and more."

0
使用此正则表达式从字符串中删除所有空格,包括空格制表符。我将其用于在登录字段上剥离电子邮件地址的空格。
'   I want to   learn ruby more and more.'.gsub(/\s/,"")
# => "Iwanttolearnrubymoreandmore."

/\s/ 匹配任何空白字符,包括制表符,而 / +/ 则不匹配。


0
如果您希望去除空格并用单个空格替换它们
" Bring   ME \n the   Horizon".squish
# => "Bring ME the Horizon"

%{ Multi-line
   string }.squish                   # => "Multi-line string"

" foo   bar    \n   \t   boo".squish # => "foo bar boo"

https://apidock.com/rails/String/squish


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接