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 \nreprezentowanie 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 .deletelub .trString .
trjest 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#deletejest bardziej czytelny, niż gsubponieważ w rzeczywistości nie zastępujesz łańcucha niczym.
deletenie 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 stripmetody.
" hello ".strip #=> "hello"
"\tgoodbye\r\n".strip #=> "goodbye"
jak wspomniano tutaj .
edytuj Oryginalny tytuł tego pytania był inny. Moja odpowiedź dotyczy pierwotnego pytania.
stripusuwa tylko początkowe
Nie potrzebujesz do tego wyrażenia regularnego. Użyj tr:
"some text\nandsomemore".tr("\n","")
replacepo prostu zmienia ciąg na nowy, jak przypisanie zmiennej; mając na uwadze, że trjest to globalne wyszukiwanie i zastępowanie znak po znaku.
użycie chomplub stripfunkcje z Rubiego:
"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
stripusuwa tylko początkowe