Видаліть кілька пробілів та нових рядків всередині 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, на щастя, це мій випадок.
Крікі

4
Як Крікі сказав незрозуміло, це метод Rails, а не метод Ruby.

17
Для контексту без Rails використовуйте some_string.strip.gsub(/\s+/, " ")саме те, що робить кабачки.
репліка

1
Дякую! Не знав проsquish
Франсуа

38

Для ілюстрації Рубіса, вбудованого в стиск :

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

3
Просто пам’ятайте: стискання стискає ВСІ рядки, що надходять із кількох символів. Отже "Видавіть копію моєї програми" .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

Використовуйте рядок # 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.