Ответы:
Вам нужно использовать "\n"not '\n'in your gsub. Различные кавычки ведут себя по-разному.
Двойные кавычки "допускают расширение символов и интерполяцию выражений, т.е. они позволяют использовать экранированные управляющие символы, например, \nдля представления их истинного значения, в данном случае новую строку , и позволяют использовать, #{expression}так что вы можете вплетать переменные и, ну, почти любое выражение рубина, которое вам нравится, в текст.
С другой стороны, одинарные кавычки 'трактуют строку буквально, поэтому нет расширения, замены, интерполяции или чего-то еще.
В этом конкретном случае лучше использовать метод .deleteили .trString для удаления новых строк .
trэто лучший выбор для этой задачи, но, как я уже сказал, я решил, что лучше указать разницу в одинарных и двойных кавычках, когда я отвечал.
Если вы хотите удалить строку, а не заменить ее, вы можете использовать String#delete(или ее эквивалент-мутатор String#delete!), например:
x = "foo\nfoo"
x.delete!("\n")
x теперь равно "дурак"
В этом конкретном случае String#deleteон более читабелен, чем gsubпоскольку вы фактически ничем не заменяете строку.
deleteявляется деструктивным, как указано здесь. Возвращает новую строку.
Если вы хотите или не возражаете против удаления всех начальных и конечных пробелов из вашей строки, вы можете использовать этот stripметод.
" hello ".strip #=> "hello"
"\tgoodbye\r\n".strip #=> "goodbye"
как упоминалось здесь .
edit Первоначальный заголовок этого вопроса был другим. Отвечаю на исходный вопрос.
stripудаляет только начальные
Для этого вам не нужно регулярное выражение. Используйте tr:
"some text\nandsomemore".tr("\n","")
replaceпросто меняет строку на новую, как присвоение переменной; тогда как trэто глобальный посимвольный поиск и замена.
используйте функции chompили stripиз Ruby:
"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
stripудаляет только начальные