删除字符串中的多个空格和换行


104

假设我们有这样的字符串:

Hello, my\n       name is Michael.

如何删除该新行并将其后的空格剥离到字符串的一个内部以获取此行?

Hello, my name is Michael.

Answers:


188

查看Rails squish方法:

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


6
最简单,最优雅的解决方案。谢谢。但是有一件事,此方法是在Rails中定义的,因此它仅在Rails应用程序中有效,幸运的是我的情况。
Kreeki

4
正如Kreeki不清楚地指出的那样,这是一种Rails方法,而不是Ruby方法。

17
对于非Rails上下文,请使用some_string.strip.gsub(/\s+/, " ")squish所做的。
rapcal 2013年

1
谢谢!不知道squish
弗朗索瓦

38

为了说明内置于squeeze中的 Ruby :

string.gsub("\n", ' ').squeeze(' ')

3
只需注意:squeeze会压缩所有包含多个字符的字符串。因此,“压缩我的应用程序的副本” .squeeze =>“压缩我的应用程序的副本”
charliepark 2013年

8
但是squeeze(' ')只是挤压空间。"Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy"
steenslag

22

最简单的方法可能是

s = "Hello, my\n       name is Michael."
s.split.join(' ') #=> "Hello, my name is Michael."

8

试试这个:

s = "Hello, my\n       name is Michael."
s.gsub(/\n\s+/, " ")

这实际上是最好的“纯红宝石”答案,并且可以正确地用于从多行字符串中去除前导空格。
科恩

5
my_string = "Hello, my\n       name is Michael."
my_string = my_string.gsub( /\s+/, " " )

他还希望删除\n理想情况下的位置(我认为),在出现以下情况时应将其替换为空格"Hello,\nMy name is Michael"
Ali

4

此正则表达式将用1个空格替换1个或多个空格的实例,ps \s将替换所有空格字符,其中包括\s\t\r\n\f

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

同样,只有回车

str.gsub!(/\n/, " ")

首先用\n空格替换所有空格,然后使用删除多个空格正则表达式。


谢谢!这对我来说是有用的,可以删除多个空格,但在单词之间保持单个空格。
acoustic_north

3

使用String#gsub

s = "Hello, my\n       name is Michael."
s.gsub(/\s+/, " ")

在的情况下输出将不正确"Hello,\nMy name is Michael"。理想情况下,您想要一个有空间的空间\n
阿里


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.