2014-10-30 3 views
1

У меня есть строка, которая выглядит так.Как заменить r в строке в ruby ​​

mystring="The Body of a\r\n\t\t\t\tSpider" 

Я хочу заменить все \ r, \ n, \ t и т. Д. Пробелом.

Код я написал для этого:

mystring.gsub(/\\./, " ") 

Но это ничего строки не делает.

Помощь.

ответ

5

\r, \n и \t являются escape sequences, представляющие возврат каретки, подачу линии и вкладку. Несмотря на то, что они написаны в виде двух символов, они интерпретируются как один символ:

"\r\n\t".codepoints #=> [13, 10, 9] 

Потому что это такое общее требование, есть shortcut\s, чтобы соответствовать все пробельные символы:

mystring.gsub(/\s/, ' ') 
#=> "The Body of a  Spider" 

Или \s+ для сопоставления нескольких пробельных символов:

mystring.gsub(/\s+/, ' ') 
#=> "The Body of a Spider" 

/\s/ эквивалентно /[ \t\r\n\f]/

+0

Это сработало отлично. Большое спасибо. –

2

String#tr предназначен для потока символов замещение. Это, кажется, немного quickier, чем String#gsub:

mystring.tr "\r", ' ' 

Это Hasan insplace версия также (это будет заменить все символы возврата каретки, перевод строки и пробелы с пространством):

mystring.tr! "\s\r\n\t\f", ' ' 
+0

Я попробовал оба варианта, но сначала удаляет только '\ r', а второй дает тот же результат. Я думаю, что ответ Стефена очень крут для требования OP. –

+0

Конечно, первый удаляет только '\ r' s. @Stefan дал правильный ответ, я только указал на факт, что этот способ имеет лучшую производительность **. – mudasobwa

+0

Да, это может быть как в аспекте производительности. В любом случае, спасибо за новую вещь, которую нужно узнать. (Я не знал об этом tr) :) –

0

вы можете использовать strip , затем добавьте пробел в строку

mystring.strip . " "

Если вы в буквальном смысле имеет \ г \ п \ т в строке:

mystring="The Body of a\r\n\t\t\t\tSpider" 
mystring.split(/[\r\t\n]/) 
+0

Не могли бы вы прочитать, что спросил ОП? – mudasobwa

1

Ответ Stefen действительно очень крутой, как всегда, с очень короткими и чистыми решениями. Но вот что я пытался удалить все специальные символы. [Отправлено как просто дополнительное решение];)

> a = "The Body of a\r\n\t\t\t\tSpider" 
=> "The Body of a\r\n\t\t\t\tSpider" 
> a.gsub(/[^0-9A-Za-z]/, ' ') 
=> "The Body of a  Spider" 
Смежные вопросы