Ответы:
Вам нужно использовать "\n"
not '\n'
in your gsub. Различные кавычки ведут себя по-разному.
Двойные кавычки "
допускают расширение символов и интерполяцию выражений, т.е. они позволяют использовать экранированные управляющие символы, например, \n
для представления их истинного значения, в данном случае новую строку , и позволяют использовать, #{expression}
так что вы можете вплетать переменные и, ну, почти любое выражение рубина, которое вам нравится, в текст.
С другой стороны, одинарные кавычки '
трактуют строку буквально, поэтому нет расширения, замены, интерполяции или чего-то еще.
В этом конкретном случае лучше использовать метод .delete
или .tr
String для удаления новых строк .
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
удаляет только начальные