Как удалить строку "\n" из строки Ruby?

У меня есть эта строка:

"some text\nandsomemore"

Мне нужно удалить из него "\n". Я пробовал

"some text\nandsomemore".gsub('\n','')

но это не сработает. Как мне это сделать? Спасибо за чтение.

Ответ 1

Вам нужно использовать "\n" not '\n' в вашем gsub. Различные кавычки ведут себя по-разному.

Двойные кавычки " позволяют расширять символы и интерполяцию выражения, т.е. они позволяют использовать экранированные контрольные символы, такие как \n, чтобы представить их истинное значение, в этом случае, новую строку и разрешить использование #{expression}, чтобы вы могли переплетать переменные и, ну, в общем, любое выражение ruby, которое вам нравится в тексте.

С другой стороны, одинарные кавычки ' обрабатывают строку буквально, поэтому нет расширения, замены, интерполяции или того, что у вас есть.

В этом конкретном случае лучше использовать метод .delete или .tr String для удаления строк новой строки.

Подробнее см. здесь

Ответ 2

Если вы хотите удалить строку, а не ее заменить, вы можете использовать String#delete (или его эквивалент мутанта String#delete!), например:

x = "foo\nfoo"
x.delete!("\n")

x теперь равно "foofoo"

В этом конкретном случае String#delete более читаем, чем gsub, так как вы фактически не заменяете строку чем-либо.

Ответ 3

Если вы хотите или не возражаете, чтобы все исходные и конечные пробелы из вашей строки были удалены, вы можете использовать метод strip.

"    hello    ".strip   #=> "hello"   
"\tgoodbye\r\n".strip   #=> "goodbye"

как упоминалось здесь.

edit Оригинальное название для этого вопроса было другим. Мой ответ на исходный вопрос.

Ответ 4

Для этого вам не нужно регулярное выражение. Используйте tr:

"some text\nandsomemore".tr("\n","")

Ответ 5

использовать функции chomp или strip из Ruby:

"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"