Удалите несколько пробелов и новые строки внутри String

104

Предположим, у нас есть такая строка:

Hello, my\n       name is Michael.

Как я могу удалить эту новую строку и разделить эти пробелы после этого на одну внутри строки, чтобы получить это?

Hello, my name is Michael.
Крики
источник

Ответы:

188

проверьте squishметод Rails :

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

Socjopata
источник
6
Самое простое и элегантное решение. Спасибо. Но есть одна вещь, этот метод определен в Rails, поэтому он будет работать только в приложениях Rails, к счастью, это мой случай.
Kreeki
4
Как немного неясно сказал Крики, это метод Rails, а не метод Ruby.
17
Для контекста, отличного от Rails, используйте some_string.strip.gsub(/\s+/, " ")именно то, что делает squish.
rapcal
1
Спасибо! Не знал обsquish
Франсуа
38

Чтобы проиллюстрировать Rubys, встроенный в squeeze :

string.gsub("\n", ' ').squeeze(' ')
Steenslag
источник
3
Просто имейте в виду: squeeze сжимает ВСЕ строки, состоящие из нескольких символов. Итак, «Сожмите копию моего приложения» .squeeze => «Сожмите копию моего приложения»
charliepark
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+/, " " )
fl00r
источник
он также хотел бы удалить в \nидеале (я чувствую) его следует заменить на пробел в случае чего-то вроде"Hello,\nMy name is Michael"
Али
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
Али
1
Use squish
currency = " XCD"
str = currency.squish
 str = "XCD" #=> "XCD"
викас приятель
источник