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


104

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

Hello, my\n       name is Michael.

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

Hello, my name is Michael.

Ответы:


188

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

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


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(' ')

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+/, " " )

он также хотел бы удалить в \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
Али


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.