Odpowiedzi:
Musisz używać "\n"
nie '\n'
w swoim gsub. Różne cudzysłowy zachowują się inaczej.
Podwójne cudzysłowy "
umożliwiają interpretację znaków i interpolację wyrażeń, np. pozwalają ci używać znaków sterujących uciekających, takich jak \n
reprezentowanie ich prawdziwej wartości, w tym przypadku, nowej linii , i pozwalają na użycie, #{expression}
dzięki czemu możesz wplatać zmienne i, cóż, prawie każde wyrażenie ruby, które lubisz w tekście.
Z drugiej strony, pojedyncze cudzysłowy '
traktują ciąg dosłownie, więc nie ma tu żadnej interpretacji, zamiany, interpolacji ani tego, co masz.
W tym konkretnym przypadku do usunięcia nowych linii lepiej jest użyć metody .delete
lub .tr
String .
tr
jest to lepszy wybór do tego zadania, ale jak mówię, pomyślałem, że lepiej będzie wskazać różnicę w pojedynczych, podwójnych cudzysłowach, kiedy odpowiadam.
Jeśli chcesz usunąć ciąg, zamiast go zastępować, możesz użyć String#delete
(lub jego odpowiednika mutatora String#delete!
), np .:
x = "foo\nfoo"
x.delete!("\n")
x
teraz równa się „foofoo”
W tym konkretnym przypadku String#delete
jest bardziej czytelny, niż gsub
ponieważ w rzeczywistości nie zastępujesz łańcucha niczym.
delete
nie jest destrukcyjny, jak wskazano tutaj. Zwraca nowy ciąg.
Jeśli chcesz lub nie masz nic przeciwko usunięciu wszystkich początkowych i końcowych białych znaków z ciągu, możesz użyć tej strip
metody.
" hello ".strip #=> "hello"
"\tgoodbye\r\n".strip #=> "goodbye"
jak wspomniano tutaj .
edytuj Oryginalny tytuł tego pytania był inny. Moja odpowiedź dotyczy pierwotnego pytania.
strip
usuwa tylko początkowe
Nie potrzebujesz do tego wyrażenia regularnego. Użyj tr:
"some text\nandsomemore".tr("\n","")
replace
po prostu zmienia ciąg na nowy, jak przypisanie zmiennej; mając na uwadze, że tr
jest to globalne wyszukiwanie i zastępowanie znak po znaku.
użycie chomp
lub strip
funkcje z Rubiego:
"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
strip
usuwa tylko początkowe